2016-12-08 45 views
0

子元素解析XML Web請求,我需要在我的春節,啓動應用程序來解析這樣的XML文檔:通過@RequestBody

<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; 
} 

and 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元素。

有沒有辦法如何解析子元素?

回答

0

id,vs,uniq屬性在你的情況下是xml屬性。

將@XmlAttribute的@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。

+0

我改變了它,但'TransactionRequest .data'仍然是空的。 – Artegon

+0

不,對不起,'id','vs''uniq'被填滿,但'數據'檔案仍然是空的。 – Artegon