~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 はアプリケーション サーバーに依存しないため、問題にはなりません。