0

遵循Krams的例子。下面返回什么,Person 对象会根据提交请求的标头转换为 JSON 还是 XML?

 @RequestMapping(value = "/person", 
           method = RequestMethod.POST, 
           headers="Accept=application/xml, application/json")
 public @ResponseBody Person addPerson(@RequestBody Person person) {
     logger.debug("Provider has received request to add new person");

     // Call service to here
     return personService.add(person);
    }

因此,当我将数据作为 json 提交时,我会返回 json,对于 xml 也是如此。还是发生了其他事情?

4

2 回答 2

2

这取决于Accepthttp请求标头。如果是 json,你会得到 json,如果是 xml,你会得到 xml。

这正是您的代码的这一部分所说的。:

....
headers="Accept=application/xml, application/json")
...

您可以发送一种 mime 类型并毫无问题地接收另一种类型。

编辑

headersproduces/consumes参数都只说明请求映射可以产生/消耗什么。他们不强制任何特定的序列化。请求/响应的类型完全由请求标头决定。如果调度程序没有找到与请求标头匹配的producesconsumes(或标头)映射,您将收到错误消息。

于 2012-04-17T08:40:50.823 回答
0

@RequestMapping 的“headers”、“produces”和“consumes”参数是拼图的一部分。它们帮助框架路由传入请求,并根据标头中的值区分请求。

这个难题的另一部分是在应用程序中配置的一组MessageConverters 。示例中的控制器处理程序方法只是返回一个对象,框架需要知道如何将对象转换为某种文本表示形式(即 XML 或 JSON)。MessageConverters 用于入站端(在使用@RequestBody 注释的参数上)和出站端(当方法返回值使用@ResponseBody 注释时)。框架根据传入请求的媒体类型选择适当的 MessageConverter。

在 Spring XML 配置文件中使用 <mvc:annotation-driven> 命名空间时,或在 Java Config 类上使用 @EnableMvc 注解时,支持 JSON 和 XML 并自动配置的 MessageConverters。

于 2012-04-20T21:03:50.180 回答