【问题标题】:Using @RequestMapping(headers = "Accept=application/json") in SpringMVC4在 SpringMVC4 中使用 @RequestMapping(headers = "Accept=application/json")
【发布时间】:2014-05-11 23:47:44
【问题描述】:

我正在使用 Spring MVC 4,我想知道我在类级别使用 @RestController,而对于其中一种方法,我正在使用 @RequestMapping(headers = "Accept=application/json")。现在任何人都可以告诉我为什么只需在我的config-servlet.xml 中使用<mvc:annotation-driven /> 就可以在我的浏览器上获得JSON 的响应。我的意思是使用 header 属性只是说这个方法只能响应具有这种类型的 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;

}
}

【问题讨论】:

    标签: spring spring-mvc


    【解决方案1】:

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

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

    查看this 的帖子。

    【讨论】:

    • 这样是不是像spring默认自动选择以JSON返回
    • @ResponseBody 存在或使用RestController 并且如果Jackson 在类路径上,那么是的,Spring MVC 将返回 JSON
    【解决方案2】:

    由于@RestController,您得到了 JSON 格式的响应,如何?

    1. @RestController 本身带有 @Controller 注释和 @ResponseBody 暗示 @RequestMapping 方法假设 默认为@ResponseBody语义。您可以了解更多信息here

    为了更全面,您的代码将如下所示:

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

    【讨论】:

    • Thankyou。现在我知道spring默认选择以JSON返回
    • 别提了 :) 我认为你应该通过批准一个答案或写一个正确的答案并批准它来结束这个话题。
    • 你也能回答这个问题吗 stackoverflow.com/questions/23624909/…
    • 请回答这个问题 http://stackoverflow.com/questions/23644452/how-to-access-a-huge-json-coming-from-a- spring-restful-service-in-a-spring-mvc
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-28
    • 2019-02-28
    • 1970-01-01
    • 2023-03-07
    • 1970-01-01
    • 2023-03-07
    • 2021-10-05
    相关资源
    最近更新 更多