通过@requestbody通过子元素解析XML Web请求



我需要在我的Spring Boot应用程序中解析此类XML文档:

<Transaction id="{ID}" vs="{VS}" uniq="{UNIQ}">
<Data field1="{VAL1}" field2="{VAL2}" />
</Transaction>

这是我的@RestController

中的端点方法
@RequestMapping(value = "/transaction", method = RequestMethod.POST)
    public ApiClient transaction(@RequestBody TransactionRequest transactionRequest) {
        LOGGER.debug(transactionRequest);
        return null;
    }

Transaction类:

@XmlRootElement(name = "Transaction")
@XmlAccessorType(XmlAccessType.FIELD)
@XmlSeeAlso(TransactionRequestData.class)
public class TransactionRequest {
    @XmlElement(name = "id")
    private long id;
    @XmlElement(name = "vs")
    private String vs;
    @XmlElement(name = "uniq")
    private String uniq;
    @XmlElement(name = "data")
    private TransactionRequestData data;
}

TransactionRequestData

@XmlRootElement(name = "Data")
@XmlAccessorType(XmlAccessType.FIELD)
public class TransactionRequestData {
    @XmlElement(name = "field1")
    private String field1;
    public String getField1() {
        return field1;
    }
    public void setField1(String field1) {
        this.field1 = field1;
    }
}

但是仅绑定了Transaction元素数据,但没有Data元素。

是否可以解析子元素?

id,vs,uniq属性是xml属性。

用@xmlattribute将TransactionRequest POJO正确更改为属性。

使用以下内容:

@XmlRootElement(name = "Transaction")
@XmlAccessorType(XmlAccessType.FIELD)
@XmlSeeAlso(TransactionRequestData.class)
public class TransactionRequest {
    @XmlAttribute(name = "id")
    private long id;
    @XmlAttribute(name = "vs")
    private String vs;
    @XmlAttribute(name = "uniq")
    private String uniq;
    @XmlElement(name = "data")
    private TransactionRequestData data;
    ....getters & setters ommited
}

@XmlRootElement(name = "Data")
@XmlAccessorType(XmlAccessType.FIELD)
public class TransactionRequestData {
    @XmlAttribute(name = "field1")
    private String field1;
    public String getField1() {
        return field1;
    }
    public void setField1(String field1) {
        this.field1 = field1;
    }
     ....getters & setters ommited
}

,不要忘记包括属性的getters和setter。