@xmlelementWrapper在XML/REST Spring Web服务中未考虑



我想为XML root元素提供自定义名称并列出元素。但是注释不起作用。

@XmlRootElement(name = "test")
@XmlAccessorType(XmlAccessType.FIELD)
public class TestRsp {
    @XmlElementWrapper(name = "persons")
    @XmlElement(name = "pax")
    private List<Person> persons;
}
public class Person {
   private String name;
   private String age;
}

用法:

@RestController
public class MyServlet {
   @RequestMapping("/test")
   public TestRsp test() {
      //...
      return rsp;
   }
}

结果:

<TestRsp> <!-- should be named "test" -->
   <persons>
     <persons> <!-- should be named "pax" -->
       <name />
       <age />
     </persons>
     <persons>
        //...
     </persons>
   </persons>
</TestRsp>

因此,我的XML注释没有被捡起。但是为什么?

尝试使用@JsonProperty注释。

看起来应该像thit:

@JsonProperty("test")

编辑1:

尝试注释您要更改的字段的Getter:

@XmlElement(name="someName")

编辑2:

@XmlRootElement(name="persons")
public class Root {

    private List<String> someList;

    @XmlElement(name="pax")
    public List<String> getSomeList() {
        return someList;
    }
    public void setSomeList(List<String> someList) {
        this.someList = someList;
    } 
    public Root(String numValue,List<String> someListValue) {
        this();
        this.number = numValue;
        this.someList = someListValue;  
    }
    /**
     * 
     */
    public Root() {
        // TODO Auto-generated constructor stub
    }
} 

也许这将提供:

 <persons>
    <pax>FOO</pax>
    <pax>BAR</pax>
 </persons>

编辑3:

也许如果您想制作解决方案工作,则需要添加一个名为 jaxb.properties 的文件,并在您的模型类中使用以下输入:

javax.xml.bind.context.factory=org.eclipse.persistence.jaxb.JAXBContextFactory

结果我必须使用@JacksonXml*注释:

@JacksonXmlRootElement(localName = "test")
public class TestRsp {
    @JacksonXmlElementWrapper(localName = "persons")
    @JacksonXmlProperty(localName = "pax")
    @JsonProperty(name = "persons")
    private List<Person> persons;
}

相关内容

最新更新