在SpringMVC4中使用@RequestMapping(headers =" Accept = application / json")

时间:2014-05-11 23:47:45

标签: spring spring-mvc

我正在使用Spring MVC 4,我想知道我在类级别使用@RestController,并且我正在使用@RequestMapping(headers = "Accept=application/json")的方法之一。现在任何人都可以告诉我为什么只是在我的<mvc:annotation-driven />中使用config-servlet.xml我在浏览器JSON中获得响应的方式。我的意思是使用header属性只是说这个方法只能响应具有这种类型头的请求。 MVC4如何知道在JSON上对浏览器做出响应。这是我的代码:

我的config-servlet.xml

<beans>
<context:component-scan base-package="com.songs.service.controller" />
<mvc:annotation-driven />
</beans>

我的RestController类

@RestController
@RequestMapping("/songappWS")
public class SongServiceWS 
{ 
@RequestMapping(value = "/topmoviesWS", method = RequestMethod.GET, headers="Accept=application/json")
public List<?> getTopMoviesWS() {
//method logic
return l1;

}
}

2 个答案:

答案 0 :(得分:2)

Spring在JSON中响应的原因是@RestController隐含意味着getTopMoviesWS()方法的响应被处理,好像它有@ResponseBody注释(已经存在于Spring 3中)

这意味着Spring将使用Jackson JSON库(如果存在于类路径中)将响应转换为JSON。

查看this帖子。

答案 1 :(得分:2)

由于@RestController,你得到了JSON的响应,怎么做?

  1. @RestController本身注明@Controller和。{ @ResponseBody暗示@RequestMapping方法假设 默认情况下为@ResponseBody语义。您可以获得更多信息here
  2. 为了更全面,您的代码将如下所示:

    @RequestMapping(value = "/topmoviesWS", method = RequestMethod.GET, 
      headers="Accept=application/json")   
    public @ResponseBody List<?> getTopMoviesWS() { 
    
       return l1;    
    }
    
    1. @ResponseBody方法上的getTopMoviesWS()注释告诉Spring MVC它不需要通过服务器端视图层呈现响应,而是返回的列表是响应主体,并且应该作为JSON直接写入HTTP响应。 返回的列表必须转换为JSON,您不需要手动执行此转换。因为Jackson 2在类路径上,所以会自动选择Spring MappingJackson2HttpMessageConverter将值转换为JSON。 您可以查看here以了解@ResponseBody机制。