大佬教程收集整理的这篇文章主要介绍了使用带有 JAXB 注释的 RestTemplate:列表无法识别,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我在应用服务器项目(不是 Spring Boot)中使用 RestTemplate 从端点获取实体。
实体 DTO(使用 JAXB 注释)是:
@XmlAccessorType(XmlAccesstype.NONE)
@XmlRootElement(name = "entity")
public class EntityDTO {
private Integer ID; // this was missing
private List<String> parametername; // parameter names
public EntityDTO() {
}
@XmlElementWrapper(name = "parameternames")
@XmlElement(name = "parametername")
public List<String> getParametername() {
return parametername;
}
public voID setParametername(List<String> parameterName) {
this.parametername = parametername;
}
@XmlElement(name = "ID")
public Integer getID() {
return ID;
}
// this was returning Integer instead of voID
public voID setID(Integer ID) {
this.ID = ID;
}
}
因此在端点中,实体以这种方式返回:
{
"entity": {
"ID": 1,"parameternames": {
"parametername": [
"param1","param2"
]
}
}
}
我正在使用 RestTemplate 和以下代码对上一个端点执行 GET:
...
httpentity<EntityDTOO> response = restTemplate.exchange(
uri,httpR_373_11845@ethod.GET,httpentity,EntityDTO.class);
...
但 RestTemplate 以这种方式解组实体:
ID: 1
parametername: null
但我期待:
ID: 1
parametername: ["param1","param2"]
有谁知道如何使用 RestTemplate 识别 @XmlElementWrapper(name = "parameternames") 注释?
提前致谢。
使用 application/xml 配置 Accept 标头。您将获得一个 xml 响应和一个带有 application/xml 的内容类型标头。然后 resttemplate 将无需额外配置和使用 bean 注释即可识别 xml。
,@XmlAccessorType(XmlAccessType.NONE)
@XmlRootElement(name = "entity")
public class EntityDTO {
private Integer id;
private List<String> parameterName; // parameter names
public EntityDTO() {
}
@XmlElementWrapper(name = "parameterNames")
@XmlElement(name = "parameterName")
public List<String> getParameterName() {
return parameterName;
}
public void setParameterName(List<String> parameterName) {
this.parameterName = parameterName;
}
@XmlElement(name = "id")
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public static void main(String[] args) {
try {
EntityDTO dto = new EntityDTO();
List<String> params = new ArrayList<>();
params.add("param1");
params.add("param2");
dto.setId(1);
dto.setParameterName(params);
JAXBContext jaxbContext = JAXBContext.newInstance(EntityDTO.class);
Marshaller jaxbMarshaller = jaxbContext.createMarshaller();
jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT,Boolean.TRUE);
StringWriter sw = new StringWriter();
jaxbMarshaller.marshal(dto,sw);
String xmlContent = sw.toString();
System.out.println(xmlContent);
} catch (Exception E) {
e.printStackTrace();
}
}
}
基本上,使用您的 EntityDTO
类并向 JAXB 对象添加参数会产生预期的 XML。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<entity>
<id>1</id>
<parameterNames>
<parameterName>param1</parameterName>
<parameterName>param2</parameterName>
</parameterNames>
</entity>
我认为问题在于方法 restTemplate.exchange
没有设置 EntityDTO
对象中的参数列表。您可能使用了该方法的错误变体。
以上是大佬教程为你收集整理的使用带有 JAXB 注释的 RestTemplate:列表无法识别全部内容,希望文章能够帮你解决使用带有 JAXB 注释的 RestTemplate:列表无法识别所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。