【问题标题】:issue on read XML child, http POST, Spring MVC关于读取 XML 子项、http POST、Spring MVC 的问题
【发布时间】:2017-11-01 03:48:31
【问题描述】:

我已经实现了将 xml 数据发布到我的控制器,但是由于我使用的 XML 格式,我在尝试读取的数据方面遇到了一些问题。

我的控制器:

@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“子”的任何值,即“&lt;stage&gt;boo&lt;/stage&gt;”或/timezone>,我遇到的问题是“&lt;timezone display_value="IN"&gt;12345&lt;/timezone&gt;”。在这个孩子上,它只读取值“12345”,但我还需要“display_value="SR"”值。 是否可以读取该值或者......我应该放弃。

【问题讨论】:

    标签: xml spring-mvc http-post


    【解决方案1】:

    您应该为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

    【讨论】:

    • - 对,但是我如何在控制器中绑定我的 AgentSla 类?
    • Timezone timezone替换String timezone
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-30
    • 2011-09-20
    • 1970-01-01
    • 2014-09-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多