Java @XML/REST Spring Web服务中未考虑XmlElementWrapper
我想为xml根元素和列表元素提供自定义名称。 但是注释不起作用Java @XML/REST Spring Web服务中未考虑XmlElementWrapper,java,xml,spring,spring-mvc,spring-boot,Java,Xml,Spring,Spring Mvc,Spring Boot,我想为xml根元素和列表元素提供自定义名称。 但是注释不起作用 @XmlRootElement(name = "test") @XmlAccessorType(XmlAccessType.FIELD) public class TestRsp { @XmlElementWrapper(name = "persons") @XmlElement(name = "pax") private List<Person> persons; } public class
@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;
}
结果:
<TestRsp> <!-- should be named "test" -->
<persons>
<persons> <!-- should be named "pax" -->
<name />
<age />
</persons>
<persons>
//...
</persons>
</persons>
</TestRsp>
//...
因此,我的xml注释不会被拾取。但是为什么呢?尝试使用
@JsonProperty
注释
它应该看起来像这样:
@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
}
}
尝试使用
@JsonProperty
注释
它应该看起来像这样:
@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
}
}
结果我不得不使用
@JacksonXml*
注释:
@JacksonXmlRootElement(localName = "test")
public class TestRsp {
@JacksonXmlElementWrapper(localName = "persons")
@JacksonXmlProperty(localName = "pax")
@JsonProperty(name = "persons")
private List<Person> persons;
}
@JacksonXmlRootElement(localName=“test”)
公共类TestRsp{
@JacksonXmlElementWrapper(localName=“persons”)
@JacksonXmlProperty(localName=“pax”)
@JsonProperty(name=“persons”)
私人名单人员;
}
结果我不得不使用@JacksonXml*
注释:
@JacksonXmlRootElement(localName = "test")
public class TestRsp {
@JacksonXmlElementWrapper(localName = "persons")
@JacksonXmlProperty(localName = "pax")
@JsonProperty(name = "persons")
private List<Person> persons;
}
@JacksonXmlRootElement(localName=“test”)
公共类TestRsp{
@JacksonXmlElementWrapper(localName=“persons”)
@JacksonXmlProperty(localName=“pax”)
@JsonProperty(name=“persons”)
私人名单人员;
}
奇怪,这会创建嵌套列表…
。为什么?因为我想输出xml。更重要的是:我如何命名列表包装器元素,使其与元素本身不同(类似于@xmlementwrapper
注释)?@JsonPRoperty
仅用于属性,而不用于注释类,这就是为什么我认为它的行为如此奇怪(嵌套列表)。因此,它将使用名为param的pax
解决这个问题。我只是在类级别上检查解决方案。但是@JsonProperty
重命名包装器元素和列表元素本身。我怎样才能独立命名它们呢?嗯,你能试试编辑1吗?同时编辑2和编辑3,希望它们能有所帮助。祝你好运。奇怪的是,这会创建嵌套列表…
。为什么?因为我想输出xml。更重要的是:我如何命名列表包装器元素,使其与元素本身不同(类似于@xmlementwrapper
注释)?@JsonPRoperty
仅用于属性,而不用于注释类,这就是为什么我认为它的行为如此奇怪(嵌套列表)。因此,它将使用名为param的pax
解决这个问题。我只是在类级别上检查解决方案。但是@JsonProperty
重命名包装器元素和列表元素本身。我怎样才能独立命名它们呢?嗯,你能试试编辑1吗?同时编辑2和编辑3,希望它们能有所帮助。祝你好运