Spring 3.0使用杰克逊消息转换器进行JSON响应
我把messageconverter配置成Jackson的那个
class Foo{int x; int y}
并在控制器中
@ResponseBody
public Foo method(){
return new Foo(3,4)
}
从那个im期望返回一个JSON字符串{x:'3',y:'4'}从服务器没有任何其他配置。 但获取404错误响应我的ajax请求
如果该方法使用@ResponseBody进行注释,则返回类型将写入响应HTTP主体。 使用HttpMessageConverters将返回值转换为声明的方法参数类型。
我错了吗 ? 或者我应该使用序列化程序将我的响应对象转换为Json字符串,然后将该字符串作为响应返回(我可以正确设置字符串响应)还是应该进行其他配置? 比如为Foo类添加注释
这里是我的conf.xml
<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>
您需要以下内容:
spring.xml
放入<mvc:annotation-driven />
org.codehaus.jackson:jackson-mapper-asl
)。 用法如下:
@RequestMapping(method = { RequestMethod.GET, RequestMethod.POST })
public @ResponseBody Foo method(@Valid Request request, BindingResult result){
return new Foo(3,4)
}
这对我有用。
请注意,那
@ResponseBody
应用于返回类型,而不是方法定义。 @RequestMapping
注解,以便Spring能检测到它。 这对我有效:
@RequestMapping(value = "{p_LocationId}.json", method = RequestMethod.GET)
protected void getLocationAsJson(@PathVariable("p_LocationId") Integer p_LocationId,
@RequestParam("cid") Integer p_CustomerId, HttpServletResponse response) {
MappingJacksonHttpMessageConverter jsonConverter =
new MappingJacksonHttpMessageConverter();
Location requestedLocation = new Location(p_LocationId);
MediaType jsonMimeType = MediaType.APPLICATION_JSON;
if (jsonConverter.canWrite(requestedLocation.getClass(), jsonMimeType)) {
try {
jsonConverter.write(requestedLocation, jsonMimeType,
new ServletServerHttpResponse(response));
} catch (IOException m_Ioe) {
// TODO: announce this exception somehow
} catch (HttpMessageNotWritableException p_Nwe) {
// TODO: announce this exception somehow
}
}
}
请注意,该方法不会返回任何内容: MappingJacksonHttpMessageConverter#write()
会MappingJacksonHttpMessageConverter#write()
作用。
MessageConverter接口http://static.springsource.org/spring/docs/3.0.x/javadoc-api/定义了一个getSupportedMediaTypes()方法,该方法在MappingJacksonMessageCoverter返回application / json的情况下
public MappingJacksonHttpMessageConverter() {
super(new MediaType("application", "json", DEFAULT_CHARSET));
}
我假设一个Accept:application / json请求头缺失。
链接地址: http://www.djcxy.com/p/48449.html上一篇: Spring 3.0 making JSON response using jackson message converter