我对 Spring MVC 还很陌生。今天学习@ResponseBody
时,有一些关于HttpMessageConverter
的疑问:
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
<property name="messageConverters">
<list>
<bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"/>
<bean class="org.springframework.http.converter.ByteArrayHttpMessageConverter"/>
<bean class="org.springframework.http.converter.xml.SourceHttpMessageConverter"/>
<bean class="org.springframework.http.converter.FormHttpMessageConverter"/>
<bean class="org.springframework.http.converter.StringHttpMessageConverter"/>
</list>
</property>
</bean>
如上所述,我们可以声明不同转换器的列表。所以这意味着我们可以选择其中之一作为响应体转换器。
但是如何选择使用呢?例如,在 functionA()
中返回 JSON,然后在 functionB()
中返回 XML。
我的方法是强制响应的Content-Type
,这是正确的方法吗?或者有更好的解决方案吗?
public @ResponseBody User getUser(HttpServletResponse response) {
response.setContentType("application/xml");
// SOME CODES HERE
return user;
}
最佳答案
But how to choose the one to use? For example, in functionA() to return JSON and then in functionB() to return XML
您可以使用 RequestMapping
的 products
属性来实现:
@RequestMapping(value = "/a", produces = "application/json")
public @ResponseBody Something functionA () { ... }
还有:
@RequestMapping(value = "/b", produces = "application/xml")
public @ResponseBody Something functionB () { ... }
此外,您可以省略产品
,并且在从客户那里接受的内容上更加自由。通过这种方法,您可以让客户端使用 Accept
通过名为内容协商的过程在 XML
、JSON
或其他内容之间进行选择 header 。事实上,如果客户端发出如下请求:
GET /a HTTP/1.1
Accept: application/json
functionA
将返回返回值的 JSON 表示形式,如果客户端发送此请求:
GET /a HTTP/1.1
Accept: application/xml
functionA
将返回返回值的 XML 表示形式。
关于java - @ResponseBody选择不同的响应格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36621860/