0

~R

Jackson を使用して JSON に自動変換する Spring MVC REST JSON チャネルを実行しようとしています。他の StackOverflow の質問で推奨されているようにすべてを行っていますが、取得してHttpMediaTypeNotAcceptableExceptionおり、Bean/リストが JSON に変換されていません。Jettyでコードを実行しています。

Spring MVC での UTF-8 エンコーディングの問題Spring 3.0 で jackson メッセージ コンバーターを使用して JSON 応答を作成しJackson アノテーションが Spring で無視されるという指示に従いましたが、どれも Bean も a も送信できませんList<String>。どちらも HTTP ステータス 406 を返します。文字列を返すメソッドのみが HTTP 200 で成功します。

私の方法は次のとおりです。

@RequestMapping(value = "/list", produces = "text/plain; charset=utf-8")
public @ResponseBody List<String> getList() {
    return createList();
}

春のファイル:

<context:component-scan base-package="de.myapp.rest" />
<context:annotation-config />
<mvc:annotation-driven />

<bean id="jacksonMessageConverter" class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter" />

<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
    <property name="messageConverters">
        <list>
            <ref bean="jacksonMessageConverter" />
        </list>
    </property>
</bean> 

このセクションを追加しても役に立ちません。

<bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver" p:order="1">
  <property name="mediaTypes">
    <map>
      <entry key="json" value="application/json"/>
    </map>
   </property>
  <property name="defaultViews">
    <list>
      <bean class="org.springframework.web.servlet.view.json.MappingJacksonJsonView"/>
    </list>
  </property>
</bean> 

リクエスト HTTP ヘッダーは jQuery によって生成され、次のようになります。

application/json、text/javascript、/を受け入れます。q=0.01 Accept-Encoding gzip, deflate Accept-Language de-de,de;q=0.8,en-us;q=0.5,en;q=0.3 User-Agent Mozilla/5.0 (Windows NT 6.1; WOW64; rv: 18.0) Gecko/20100101 Firefox/18.0

ただし、HTTP 406 と HTML エラー メッセージが表示され、ログ ファイルに次の行が記録されます。

ハンドラーからの例外の解決 [public de.myapp.rest.TestBean de.myapp.rest.Test.getList()]: org.springframework.web.HttpMediaTypeNotAcceptableException: 受け入れ可能な表現が見つかりませんでした

問題は、ここで何が欠けているのかということです。ジャクソン コンバーターが登録されていないのはなぜですか / どうすればデバッグできますか? 経由でコードを実行していますjetty:run。しかし、Spring はアプリケーション サーバーに依存しないため、問題にはなりません。

4

1 に答える 1