【发布时间】:2017-05-03 01:50:38
【问题描述】:
不知道为什么,但我的 Spring Boot web / REST 应用程序中的编组器忽略了 javax.xml.bind.annotation.* 注释。
ValidationErrorResponse 应编组到 Errors XML 字段中。
@XmlRootElement(name = "Errors")
@XmlAccessorType(XmlAccessType.FIELD)
@XmlSeeAlso(ValidationError.class)
public class ValidationErrorResponse {
@XmlElementWrapper(name = "Errors")
private List<ValidationError> errors = new ArrayList<ValidationError>();
@XmlAttribute(name = "count")
public int getCount() {
return this.errors.size();
}
public void addError(ValidationError error) {
this.errors.add(error);
}
@XmlElement(name = "Errors")
public List<ValidationError> getErrors() {
return errors;
}
}
ValidationError 应编组到Errors 字段中的Error XML 子字段中。
import javax.xml.bind.annotation.*;
@XmlRootElement(name = "Error")
@XmlAccessorType(XmlAccessType.FIELD)
public class ValidationError {
@XmlAttribute(name = "field")
private final String field;
@XmlAttribute(name = "message")
private String message;
public ValidationError(String field) {
this.field = field;
}
public void setMessage(String message) {
this.message = message;
}
public String getField() {
return field;
}
public String getMessage() {
return message;
}
}
但它会返回这个 XML 字符串
<ValidationErrorResponse>
<errors>
<errors>
<field>transaction</field>
<message>message...</message>
</errors>
<errors>
<field>transaction</field>
<message>message...</message>
</errors>
<errors>
<field>transaction</field>
<message>message...</message>
</errors>
</errors>
<count>3</count>
</ValidationErrorResponse>
应该是
<Errors count=3>
<Error field="..." message="....">
<Error field="..." message="....">
<Error field="..." message="....">
</Errors>
我做错了什么?
【问题讨论】:
标签: json xml spring validation marshalling