2017-05-31 105 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