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 />
  • 在classpath中放置jaskson jar(Maven artifactId是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

    下一篇: validate individual request params