Spring resttemplate 和 jaxb 一起 - 忽略 null 元素

Spring resttemplate together with jaxb - ignore null elements

提问人:Ondrej Havlicek 提问时间:9/25/2023 最后编辑:Ondrej Havlicek 更新时间:9/25/2023 访问量:19

问:

我有一个 XSD 文件表单,我使用 JAXB 生成了一个 POJO。

像这样:

    <?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">

  <xs:element name="XYZ">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="A" type="xs:string" minOccurs="0" />
        <xs:element name="B" type="xs:string" minOccurs="0" />

从那以后,我得到了:

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
    "a",
    "b",
    
})
@XmlRootElement(name = "XYZ")
public class XYZ {

    @XmlElement(name = "A")
    protected String a;
    @XmlElement(name = "B")
    protected String b;

当我使用 rest 模板将请求发送到 rest 服务时,我希望忽略具有空/null 值的元素。最近我开始使用某个平台的新版本,其中更新了 jaxb/spring/much libs 的版本。


HttpEntity<XYZ> requestHttpEntity = new HttpEntity<>(xyz);


    B response;

    try {
      ResponseEntity<B> responseEntity = restTemplate.exchange("someAddress", HttpMethod.POST, requestHttpEntity, B.class);
      response = responseEntity.getBody();
    }
    catch (Exception e) {
      return null;
    }

不幸的是,我无法说服系统忽略 null 值 - 您有这方面的经验吗?重要的是我不能直接更改 POJO,只能生成它。

多谢。

xml spring xsd jaxb resttemplate

评论

0赞 LMC 9/25/2023
请添加相关代码,以便问题符合最小可重现的示例。是否将 XML 有效负载发送到 REST 服务?
0赞 Ondrej Havlicek 9/25/2023
嗨,@LMC,感谢您的反应 - 我添加了一个用于将 XML 有效负载发送到 rest 服务的代码。
0赞 LMC 9/25/2023
这里的关键可能是生成有效负载 xyz 的代码。XSD 用于描述和验证 xml 实例。这可能是您正在向 POJO 序列化的内容。这可能是导致问题的代码,而不是用于发送有效负载的代码。
0赞 Ondrej Havlicek 9/25/2023
有效负载的创建方式如下: xyz XYZ = new XYZ();xyz.setA(“测试”)。然后,我希望有效负载中的XML仅包含一个元素,而不是空元素。
0赞 LMC 9/25/2023
这是一个 java 对象,而不是有效负载。有效负载是序列化为 xml 或 json 的对象。

答: 暂无答案