~R
我正在尝试使用 Jackson 自动转换为 JSON 的 Spring MVC REST JSON 通道。尽管我按照其他 StackOverflow 问题中的建议做所有事情,但我得到了HttpMediaTypeNotAcceptableException
并且我的 bean/列表没有转换为 JSON。我在Jetty上运行代码。
我已经按照Spring MVC 中的 UTF-8 编码问题、Spring 3.0 使用 jackson 消息转换器和Jackson 注释在 Spring 中被忽略的JSON 响应的说明进行操作,但是它们都不能让我既不能发送 bean 也不能发送List<String>
. 两者都返回 HTTP 状态 406。只有返回 String 的方法以 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) 壁虎/20100101 火狐/18.0
但是,我收到带有 HTML 错误消息的 HTTP 406,以及日志文件中的以下行:
从处理程序 [public de.myapp.rest.TestBean de.myapp.rest.Test.getList()] 解决异常:org.springframework.web.HttpMediaTypeNotAcceptableException:找不到可接受的表示
所以问题是,我在这里缺少什么?为什么杰克逊转换器没有注册/我该如何调试它?我正在通过jetty:run
. 但这无关紧要,因为 Spring 是独立于应用程序服务器的。