HttpMessageConverter <t>是自动转换还是我们需要在Spring

时间:2015-10-11 10:08:30

标签: java json spring http-headers

我在java中使用Spring我遇到了HttpMessageConverter,用于将响应类型转换为其他类型

我想知道这个类的一些事情是一个例子

有一个服务器和一个客户端,服务器以某种格式发送响应(比如XML),如果客户端发送像

这样的标题,客户端想要其他格式的响应(比如说Json)
headers.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));

HttpMessageConverter是否会自动将响应类型转换为Json,否则在客户端代码中我们需要说HttpMessageConverter来转换响应类型

1 个答案:

答案 0 :(得分:2)

  

服务器以某种格式发送响应(比如XML),客户端想要   如果客户端发送像

这样的标题,则以其他格式(比如Json)响应

简而言之,有一个名为内容协商 Conneg 的概念。您作为客户端使用HTTP标头(如AcceptAccept-LanguageAccept-Encoding等指定预期的内容类型,语言,编码等,并将该请求发送到服务器和服务器相应地回应。因此,如果您将Accept标头设置为application/json而服务器可以提供application/xml内容类型,则会返回406 Not Acceptable HTTP客户端错误。 基本上它表示我可能拥有您想要的资源,但没有所请求的代表

如果您有权访问服务器代码,则可以通过弹簧将其转换为Data Transfer Objectxml的方式更改json。只需使用@ResponseBody为每个方法添加注释时,该方法的返回值可以通过默认的HttpMessageConverter转换:

  

使用。将请求主体转换为方法参数   HttpMessageConverter。 HttpMessageConverter负责   从HTTP请求消息转换为对象并进行转换   从一个对象到HTTP响应体。该   RequestMappingHandlerAdapter支持@RequestBody注释   以下默认HttpMessageConverters:

     
      
  • ByteArrayHttpMessageConverter转换字节数组。
  •   
  • StringHttpMessageConverter转换字符串。
  •   
  • FormHttpMessageConverter将表单数据转换为MultiValueMap或从MultiValueMap转换。
  •   
  • SourceHttpMessageConverter转换为/来自javax.xml.transform.Source
  •   

此外,如果您将Jackson 2库添加到类路径中,MappingJackson2HttpMessageConverter将负责转换为/从JSON转换。

但是,如果您无法访问服务器代码并且服务器仅提供XML,则唯一的选择是从服务器获取XML并手动将其转换为JSON。