Spring 3.0使用jackson消息转换器进行JSON响应

dup*_*dup 24 java spring json spring-mvc jackson

我将我的messageconverter配置为杰克逊的

class Foo{int x; int y}
Run Code Online (Sandbox Code Playgroud)

并在控制器中

@ResponseBody
public Foo method(){
   return new Foo(3,4)
}
Run Code Online (Sandbox Code Playgroud)

从那个我期望从服务器返回一个JSON字符串{x:'3',y:'4'},没有任何其他配置.但得到我的ajax请求的404错误响应

如果使用@ResponseBody注释该方法,则将返回类型写入响应HTTP正文.返回值将使用HttpMessageConverters转换为声明的方法参数类型.

我错了吗 ?或者我应该使用序列化程序将我的响应对象转换为Json字符串,然后将该字符串作为响应返回.(我可以正确地进行字符串响应)或者我应该进行其他配置吗?比如为Foo类添加注释

这是我的conf.xml

<bean id="jacksonMessageConverter" class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
Run Code Online (Sandbox Code Playgroud)

  <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
<property name="messageConverters">
  <list>
    <ref bean="jacksonMessageConverter"/>
  </list>
</property>
Run Code Online (Sandbox Code Playgroud)

uth*_*ark 22

您需要以下内容:

  1. 设置注解驱动的编程模型:将<mvc:annotation-driven />spring.xml
  2. org.codehaus.jackson:jackson-mapper-asl在类路径中放置jaskson jar(Maven artifactId ).
  3. 使用如下:

    @RequestMapping(method = { RequestMethod.GET, RequestMethod.POST })
    public @ResponseBody Foo method(@Valid Request request, BindingResult result){
    return new Foo(3,4)
    }
    
    Run Code Online (Sandbox Code Playgroud)

这适合我.

请注意,那

  1. @ResponseBody 应用于返回类型,而不是方法定义.
  2. 你需要@RequestMapping注释,以便Spring将检测它.

  • @ResponseBody可以放在公共标识符之前或之后.在任何一个地方,它都是方法签名的一部分,与返回类型无关.(@ResponseBody是一个@Target(ElementType.METHOD)注释.) (2认同)

Bal*_*usC 2

HTTP 404 错误仅意味着找不到资源。这可能有两个原因:

  1. 请求 URL 错误(客户端错误或给定链接/按钮中的 URL 错误)。
  2. 资源不在您期望的位置(服务器端错误)。

要解决问题 1,请确保您使用或提供正确的请求 URL(区分大小写!)。要修复 2,请检查服务器启动日志是否有任何启动错误并进行相应修复。

这一切都超出了迄今为止发布的代码和信息。