Spring RestController 如何同时接受 JSON 和 XML?

Posted

技术标签:

【中文标题】Spring RestController 如何同时接受 JSON 和 XML?【英文标题】:How can Spring RestController accept both JSON and XML? 【发布时间】:2017-11-19 16:43:42 【问题描述】:

我有一个很好用的 Spring 控制器:

@RestController
@RequestMapping(value = "/widgets")
class WidgetController 
    @RequestMapping(method = RequestMethod.POST)
    WidgetResponse createWidget(@Valid @RequestBody Widget widget) 
        // ...
    

在这里我可以发布一条 JSON 消息并创建我的小部件实例:


  "name" : "Widget1",
  "type" : "spinning",
  "isFizz" : true

我希望这个端点也能像这样接受和反序列化 XML 小部件:

<widget name="Widget1">
  <type>spinning</type>
  <isFizz>false</isFizz>
</widget>

我想弄清楚:

如何让端点接受 JSON 和 XML 数据,并正确反序列化它们;和 如何根据 Schema 验证任何 XML,例如 widgets.xsd

有什么想法吗?

【问题讨论】:

【参考方案1】:

用注解@RequestMapping的参数consumes

@RequestMapping(value = "/widgets",consumes=MediaType.APPLICATION_JSON_VALUE,MediaType.APPLICATION_XML_VALUE)
WidgetResponse createWidget(@Valid @RequestBody Widget widget)
///

参数consumes接受一个MediaType数组

【讨论】:

以上是关于Spring RestController 如何同时接受 JSON 和 XML?的主要内容,如果未能解决你的问题,请参考以下文章

spring mvc中,RestController如何自定义返回的HTTP状态

如何在 Spring RestController 中下载 excel 文件

如何响应 Spring RestController 返回 ManyToOne 双向 JPA 实体对象?

如何从 Validated Spring RestController 获取多个缺失请求参数的详细信息?

Spring Boot RestController 在没有 SpringBootApplication 的情况下如何工作?

如何在 Spring Boot 的 @RestController 注释用于创建请求处理程序的方法中使用带有参数的构造函数