我正在使用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;
}
}
答案 0 :(得分:2)
Spring在JSON中响应的原因是@RestController
隐含意味着getTopMoviesWS()
方法的响应被处理,好像它有@ResponseBody
注释(已经存在于Spring 3中)
这意味着Spring将使用Jackson JSON库(如果存在于类路径中)将响应转换为JSON。
查看this帖子。
答案 1 :(得分:2)
由于@RestController,你得到了JSON的响应,怎么做?
@RestController
本身注明@Controller
和。{
@ResponseBody
暗示@RequestMapping
方法假设
默认情况下为@ResponseBody
语义。您可以获得更多信息here。为了更全面,您的代码将如下所示:
@RequestMapping(value = "/topmoviesWS", method = RequestMethod.GET,
headers="Accept=application/json")
public @ResponseBody List<?> getTopMoviesWS() {
return l1;
}
@ResponseBody
方法上的getTopMoviesWS()
注释告诉Spring MVC它不需要通过服务器端视图层呈现响应,而是返回的列表是响应主体,并且应该作为JSON直接写入HTTP响应。
返回的列表必须转换为JSON,您不需要手动执行此转换。因为Jackson 2在类路径上,所以会自动选择Spring MappingJackson2HttpMessageConverter
将值转换为JSON。
您可以查看here以了解@ResponseBody
机制。