@XmlRootElement注释读入模型

时间:2018-04-13 07:29:43

标签: java xml rest spring-boot

我正在尝试将MediaType.APPLICATION_XML数据读入模型类以使用Rest API。

示例:代码片段

 @PostMapping(value = "test/{id}/updateSome", consumes = { MediaType.APPLICATION_XML })
 public ResponseEntity<String> updateSome(@PathVariable String id,
                @RequestBody SomeModel reqBody) { ... }

型号:

 @Data
 @XmlRootElement(name = "TYPES")
 class SomeModel {
    private String  x;
    private String  y;
 }

Rest API XML正文:

<TYPES>
  <TYPE>
     <x>3</x>
     <y>5</y>
  </TYPE>
</TYPES> 

错误:

当@XmlRootElement(name =“TYPES”)

(x=null, y=null)

当@XmlRootElement(name =“TYPE”)

  

“状态”:400,        “错误”:“错误请求”,        “exception”:“org.springframework.http.converter.HttpMessageNotReadableException”,        “message”:“无法解组[com.model.SomeModel]:意外元素(uri:\”\“,local:\”TYPES \“)。预期元素是   &LT; {} TYPE取代;嵌套异常是javax.xml.bind.UnmarshalException:   意外元素(uri:\“\”,local:\“TYPES \”)。预期的要素是   &LT; {} TYPE&gt;”中,

2 个答案:

答案 0 :(得分:0)

在你的api中你期待

<TYPES>
  <x>..
  <y>...

附加信息无法识别。

答案 1 :(得分:0)

我已经明白了。

创建了两个Model类并使用了@XmlElement注释。

模型1:

 @Data
 @XmlRootElement(name = "TYPES")
 @XmlAccessorType(XmlAccessType.FIELD)
 class SomeModel {

    @XmlElement(name = "TYPE")
    private SomeOtherModel[] type;

 }

模型2:

 @Data
 @XmlRootElement(name = "TYPE")
 @XmlAccessorType(XmlAccessType.FIELD)
 class SomeOtherModel {

     private String  x;
     private String  y;

 }
  

获得预期值(x = 3,y = 5)