2017-05-31 106 views
0

我已經有實現將xml數據發佈到我的控制器,但我正在嘗試閱讀由於我給予的XML格式的數據而導致的數據問題。問題讀取XML子,http POST,Spring MVC

我的控制器:

@RequestMapping(method = RequestMethod.POST, consumes = {MediaType.APPLICATION_XML_VALUE}, produces = {MediaType.APPLICATION_XML_VALUE}) 
    public ResponseEntity<?> SlaDetails(@RequestBody AgentSla[] task_sla) { 
     MessageDto messageDto = new MessageDto(); 
     for (AgentSla next: task_sla){ 
      System.out.println(next.getStage()); 
     } 
     messageDto.setMsg("ok"); 
     return ResponseEntity.status(HttpStatus.CREATED).body(messageDto); 
    } 

我的實體:

@XmlRootElement(name="task_sla") 
    public class AgentSla { 

    private Long id; 
    private String stage; 
    private String timezone; 

    //getters and setters 

XML文檔樣本:

<?xml version="1.0" encoding="UTF-8"?> 
<xml> 
<task_sla> 
<stage>boo</stage> 
<timezone display_value="IN">12345</timezone> 
</task_sla> 

<task_sla> 
<stage>foo</stage> 
<timezone display_value="SR">12345</timezone> 
</task_sla> 
</xml> 

的問題:我可以讀取XML的任何值「subchilds 「即」<stage>boo</stage>「或< /timezone>我遇到的問題是「<timezone display_value="IN">12345</timezone>」。在這個孩子只讀取值「12345」,但我也需要「display_value =」SR「」值。 是否可以讀取該值或...我應該放棄。

回答

0

你應該做一個新的類timezone領域和使用@XmlAttribute

@XmlAccessorType(XmlAccessType.FIELD) 
@XmlRootElement(name = "timezone") 
public class Timezone { 
    @XmlAttribute(name = "display_value") 
    private String displayValue; 

    @XmlValue 
    private String timezoneValue; 

    // write your getters and setters 
} 

然後使用Timezone類在

@XmlRootElement(name="task_sla") 
public class AgentSla { 
    private Long id; 
    private String stage; 
    private Timezone timezone; 
    // getters and setters 
} 

在這裏看到:

How can I add xml attributes to jaxb annotated class XmlElementWrapper?

XML element with attribute and content using JAXB

+0

- 正確,但我將如何綁定在我的控制器對我的AgentSla類? – user2342259

+0

用'Timezone timezone'替換'String timezone' – shawn