【问题标题】:Why Spring Boot doesn't marshall XML correctly / ignores XML javax.xml.bind.annotation.*?为什么 Spring Boot 不能正确编组 XML/忽略 XML javax.xml.bind.annotation.*?
【发布时间】: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


    【解决方案1】:

    问题导致jackson-dataformat-xml 依赖于我的类路径:

    <dependency>
                 <groupId>com.fasterxml.jackson.dataformat</groupId>
                 <artifactId>jackson-dataformat-xml</artifactId>
                 <version>2.8.5</version>
            </dependency>
    

    当我按预期推迟所有工作时。

    【讨论】:

    • 您能解释一下原因吗?我试了,还是不行
    猜你喜欢
    • 2021-06-22
    • 1970-01-01
    • 2022-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多