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

sme*_*eeb 2 xml spring-mvc jackson deserialization spring-boot

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

@RestController
@RequestMapping(value = "/widgets")
class WidgetController {
    @RequestMapping(method = RequestMethod.POST)
    WidgetResponse createWidget(@Valid @RequestBody Widget widget) {
        // ...
    }
}
Run Code Online (Sandbox Code Playgroud)

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

{
  "name" : "Widget1",
  "type" : "spinning",
  "isFizz" : true
}
Run Code Online (Sandbox Code Playgroud)

我希望这个端点也接受和反序列化 XML 小部件,如下所示:

<widget name="Widget1">
  <type>spinning</type>
  <isFizz>false</isFizz>
</widget>
Run Code Online (Sandbox Code Playgroud)

我想弄清楚:

  • 如何让端点接受两个JSON和XML数据,并正确反序列化他们。和
  • 如何根据架构验证任何 XML,例如 widgets.xsd

有任何想法吗?

Chr*_*ani 5

consumes注释的参数@RequestMapping

@RequestMapping(value = "/widgets",consumes={MediaType.APPLICATION_JSON_VALUE,MediaType.APPLICATION_XML_VALUE})
WidgetResponse createWidget(@Valid @RequestBody Widget widget){
///
{
Run Code Online (Sandbox Code Playgroud)

参数消耗采用 MediaType 数组