在使用Spring Boot创建webservice时,如何在封送响应时删除空元素?

在使用Spring Boot创建webservice时,如何在封送响应时删除空元素?,spring,web-services,jaxb,spring-boot,spring-ws,Spring,Web Services,Jaxb,Spring Boot,Spring Ws,我有一个Web服务返回空元素,如。我相信这是由于添加了空对象造成的,但我希望在发送到客户端之前将其删除。这会由默认封送拆收器处理吗 我的@Endpoint的@ResponsePayload方法返回一个JAXBElement——我应该假设Spring正在使用JAXB执行编组吗 编辑:尝试添加有用的详细信息 pom.xml <dependencyManagement> <dependencies> <dependency>

我有一个Web服务返回空元素,如
。我相信这是由于添加了空对象造成的,但我希望在发送到客户端之前将其删除。这会由默认封送拆收器处理吗

我的
@Endpoint
@ResponsePayload
方法返回一个
JAXBElement
——我应该假设Spring正在使用JAXB执行编组吗

编辑:尝试添加有用的详细信息

pom.xml

 <dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>io.spring.platform</groupId>
            <artifactId>platform-bom</artifactId>
            <version>2.0.0.BUILD-SNAPSHOT</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-ws</artifactId>
    </dependency>
    <dependency>
        <!--allows configuration properties-->
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-configuration-processor</artifactId>
        <optional>true</optional>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-tomcat</artifactId>
        <scope>provided</scope>
    </dependency>
我的服务获取数据并填充生成的对象以返回

GeneratedObj generatedObj = objectFactory.createGeneratedObj();
// this *might* be an empty string
generatedObj.setSomeProperty = myserviceResult.getSomeProperty();
// one possible state is that generatedObj is null
generatedReplyObj.addChild(generatedObj);
由于
响应
(包含
回复
等)是通过Web服务返回的,因此我假设Spring的默认封送处理程序正在进行处理。在本例中,我希望得到如下结果:

<reply>
    <generatedobj>
        <someproperty>value</someproperty>
    </generatedobj>
</reply>
(当然,每个字段都有访问器)

进一步编辑:


好的,也许另一种检验方法可能与。不过,这里的区别在于物体的深度和类型。当一个对象包含另一个字段为空的对象时,JAXB如何封送该对象?我想我希望整个链都会被删除,但我认为这只会删除最外层的链。

您能添加一些简单的代码来了解它的外观吗?还要提供更多关于配置的详细信息,哪个Spring引导版本?您正在使用哪些启动程序模块?能否显示您的Relpy JAXB Bean定义?
GeneratedObj generatedObj = objectFactory.createGeneratedObj();
// this *might* be an empty string
generatedObj.setSomeProperty = myserviceResult.getSomeProperty();
// one possible state is that generatedObj is null
generatedReplyObj.addChild(generatedObj);
<reply>
    <generatedobj>
        <someproperty>value</someproperty>
    </generatedobj>
</reply>
<reply>
    <generatedobj />
</reply>
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "FNRetrieveInfoReply", propOrder = {
    "quickResponse",
    "fnInfo",
    "caseParticipantHeader"
})
public class FNRetrieveInfoReply {

    @XmlElement(name = "QuickResponse", namespace = "urn:us:gov:hhs:acf:qikrsp", required = true)
    @NotNull
    @Valid
    protected QuickResponse quickResponse;
    @XmlElement(name = "FNInfo", namespace = "urn:us:gov:hhs:acf:fn", required = true)
    @NotNull
    @Valid
    protected FNInfo fnInfo;
    @XmlElement(name = "CaseParticipantHeader", namespace = "urn:us:gov:hhs:acf:chdr", required = true)
    @NotNull
    @Valid
    protected CaseParticipantHeader caseParticipantHeader;
}