我目前正在开发一个Spring Boot(版本1.3.1)微服务,它连接到MongoDB后端,并通过控制器向客户端提供后端数据(Ex:Provider对象)。
项目有一个扩展ResourceSupport(Ex:ProviderResourceSupport)的类文件,还有另一个扩展ResourceSupportAssembler类(Ex:ProviderAssembler)的类,用于生成到Response对象的链接。
理想情况下,我的要求是根据需要自定义JSON对象,并使用@JsonView(遵循此链接 - https://spring.io/blog/2014/12/02/latest-jackson-integration-improvements-in-spring)并在maven项目中添加Spring Jackson依赖项。
我还添加了spring.jackson.serialization-inclusion = non-null& application.properties中的spring.jackson.serialization.indent_output = true。
对于控制器中的一个方法,响应将是'ResponseEntity<列表与LT; ProviderResourceSupport>>” ,如果数据不存在,则此方法返回“null”响应。
我已经在我的实体对象和控制器上添加了@JsonInclude(Include = NON_NULL)但仍然获得了'null'响应。
我不希望'null'作为回复,如果有人遇到类似的问题,请求你帮助我。
答案 0 :(得分:0)
我修复了这个null属性,从json响应中扩展了Jackson Mapper Bean,但是我没有使用Spring Boot,快速查看并检查它是否适合你
public class Jackson2ObjectMapperCustom extends Jackson2ObjectMapperFactoryBean {
@Override
public void afterPropertiesSet() {
super.afterPropertiesSet();
getObject().setSerializationInclusion(JsonInclude.Include.NON_NULL).setSerializationInclusion(JsonInclude.Include.NON_EMPTY);
Hibernate5Module hibernateModule = new Hibernate5Module();
hibernateModule.disable(Feature.USE_TRANSIENT_ANNOTATION);
hibernateModule.enable(Feature.FORCE_LAZY_LOADING);
getObject().registerModules(new JavaTimeModule(), hibernateModule);
getObject().configure(SerializationFeature.INDENT_OUTPUT, true);
getObject().configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
getObject().setDateFormat(new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss"));
}
}
在我的情况下,我使用Spring Xml配置
<bean id="objectMapper" class="com.xxx.common.Jackson2ObjectMapperCustom" />
<mvc:annotation-driven>
<mvc:message-converters>
<bean class="org.springframework.http.converter.StringHttpMessageConverter"/>
<bean class="org.springframework.http.converter.ResourceHttpMessageConverter"/>
<bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
<property name="objectMapper" ref="objectMapper"/>
</bean>
</mvc:message-converters>
</mvc:annotation-driven>