簡體   English   中英

通過@RequestBody解析帶有子元素的XML Web請求

[英]Parsing XML web request with sub-element via @RequestBody

我需要在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屬性。

正確將@XmlElement批注和@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
}

並且不要忘記為屬性包括getter和setter。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM