在使用Spring Boot创建webservice时,如何在封送响应时删除空元素?
我有一个Web服务返回空元素,如在使用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>
。我相信这是由于添加了空对象造成的,但我希望在发送到客户端之前将其删除。这会由默认封送拆收器处理吗
我的@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;
}