我对Spring MVC很陌生。今天,当我学习@ResponseBody
时,我对HttpMessageConverter
s:
<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;
}
答案 0 :(得分:1)
但如何选择使用?例如,在functionA()中 返回JSON,然后在functionB()中返回XML
您可以使用RequestMapping
的{{1}}属性:
produces
和
@RequestMapping(value = "/a", produces = "application/json")
public @ResponseBody Something functionA () { ... }
此外,您可以省略@RequestMapping(value = "/b", produces = "application/xml")
public @ResponseBody Something functionB () { ... }
和在客户接受的内容中更加自由。使用此方法,您可以让客户使用produces
标头通过名为内容协商的流程在XML
,JSON
或其他任何内容中进行选择。事实上,如果客户端发出如下请求:
Accept
GET /a HTTP/1.1
Accept: application/json
将返回返回值的JSON表示,如果客户端发送此请求:
functionA
GET /a HTTP/1.1
Accept: application/xml
将返回返回值的XML表示形式。
答案 1 :(得分:0)
使用
@RequestMapping(value = "/url1", produces = "application/json")
用于json并使用
@RequestMapping(value = "/url2", produces = "application/xml")
用于xml输出