@ResponseBody选择不同的响应格式

我是Spring MVC的新手。今天,当我学习时@ResponseBody,我对HttpMessageConverters有一些疑问

<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>

如上所述,我们可以声明不同转换器的列表。因此,这意味着我们可以选择其中之一作为响应体转换器。

但是如何选择一种使用呢?例如,infunctionA()返回JSON,然后infunctionB()返回XML。

我的方法是采取Content-Type应对措施,这是正确的方法吗?还是存在更好的解决方案?

public @ResponseBody User getUser(HttpServletResponse response) {
    response.setContentType("application/xml");         
    // SOME CODES HERE
    return user;
}
阿里·德加尼(Ali Dehghani)

但是如何选择一种使用呢?例如,在functionA()中返回JSON,然后在functionB()中返回XML

您可以使用RequestMappingproduces属性:

@RequestMapping(value = "/a", produces = "application/json")
public @ResponseBody Something functionA () { ... }

和:

@RequestMapping(value = "/b", produces = "application/xml")
public @ResponseBody Something functionB () { ... }

此外,您可以省略produces更加放心地接受客户的要求通过这种方法,您可以让客户端在之间进行选择XMLJSON使用标头通过称为内容协商的过程进行选择Accept实际上,如果客户发出如下请求:

GET /a HTTP/1.1
Accept: application/json

functionA 将返回返回值的JSON表示形式,如果客户端发送此请求,则:

GET /a HTTP/1.1
Accept: application/xml

functionA 将返回返回值的XML表示形式。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章