Json 弹簧护套1.2.5&;2忽略空字段
在带有Jersey 2接口的Spring boot 1.2.5中,如何将JSON封送器设置为不包含具有空值的字段 例如:Json 弹簧护套1.2.5&;2忽略空字段,json,jackson,spring-boot,jersey-2.0,Json,Jackson,Spring Boot,Jersey 2.0,在带有Jersey 2接口的Spring boot 1.2.5中,如何将JSON封送器设置为不包含具有空值的字段 例如: [ { "created": 1433987509174, "lastModified": 1433876475580, "id": 1, "example": "example1b" }, { "created": 1434502031212, "last
[
{
"created": 1433987509174,
"lastModified": 1433876475580,
"id": 1,
"example": "example1b"
},
{
"created": 1434502031212,
"lastModified": 1434502031212,
"id": 10000,
"example": "example1c"
},
{
"created": 1439151444176,
"lastModified": 1439151444176,
"id": 10011,
"example": null
}
]
json输出中根本不应该包含字段“example”:null,但这里它指定为null
在@SpringBootApplication类中,我尝试添加:
@Bean
public MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter() {
final MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
final ObjectMapper objectMapper = new ObjectMapper();
objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
converter.setObjectMapper(objectMapper);
return converter;
}
或
或
和/或向对象本身添加@JsonSerialize(include=Inclusion.NON_NULL)
但它仍然会产生与上面包含的“示例”相同的响应:null
它在Spring3.0.7上使用@JsonSerialize(include=include.NON_NULL)
工作,但现在我已经移植到SpringBoot1.2.5,它不再工作了
我相信我遵循了文档,但它不起作用,所以我希望有人能看到我遗漏的东西?提前谢谢
编辑:还尝试添加类:
@Configuration
public class WebConfiguration extends WebMvcAutoConfiguration {
@Primary
@Bean
public ObjectMapper mapper() {
final ObjectMapper objectMapper = new ObjectMapper();
objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
return objectMapper;
}
}
解决方案:
package com.my.spring;
import javax.ws.rs.ext.ContextResolver;
import org.glassfish.jersey.server.ResourceConfig;
import org.glassfish.jersey.servlet.ServletProperties;
import org.springframework.context.annotation.Configuration;
import com.my.spring.service.rs.MyRestServiceImpl;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.databind.ObjectMapper;
@Configuration
public class JerseyConfiguration extends ResourceConfig {
public class ObjectMapperContextResolver implements ContextResolver<ObjectMapper> {
private final ObjectMapper mapper;
public ObjectMapperContextResolver() {
mapper = new ObjectMapper();
mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
}
@Override
public ObjectMapper getContext(Class<?> type) {
return mapper;
}
}
public JerseyConfiguration() {
register(new ObjectMapperContextResolver());
register(MyRestServiceImpl.class); // My jax-rs implementation class
property(ServletProperties.FILTER_FORWARD_ON_404, true); // Not needed for this non_null issue
}
}
package com.my.spring;
导入javax.ws.rs.ext.ContextResolver;
导入org.glassfish.jersey.server.ResourceConfig;
导入org.glassfish.jersey.servlet.ServletProperties;
导入org.springframework.context.annotation.Configuration;
导入com.my.spring.service.rs.MyRestServiceImpl;
导入com.fasterxml.jackson.annotation.JsonInclude;
导入com.fasterxml.jackson.databind.ObjectMapper;
@配置
公共类Jersey配置扩展了ResourceConfig{
公共类ObjectMapperContextResolver实现ContextResolver{
私有最终对象映射器映射器;
公共对象MapPercontextResolver(){
映射器=新的ObjectMapper();
setSerializationInclusion(JsonInclude.Include.NON_NULL);
}
@凌驾
公共对象映射器getContext(类类型){
返回映射器;
}
}
公共运动衫配置(){
寄存器(新的ObjectMapperContextResolver());
register(MyRestServiceImpl.class);//我的jax rs实现类
属性(ServletProperties.FILTER_FORWARD_ON_404,true);//此非空问题不需要
}
}
我不知道如何混合Spring方式(配置映射器)以及Jersey如何处理这个问题。但是配置ObjectMapper
的方法是通过ContextResolver
,如中所示
然后将ObjectMapperContextResolver
注册到
或者,如果您正在扫描软件包,则@提供者
注释将拾取该类。谢谢!这很有意义,因为我选择了JAX-RS接口,所以使用了jersey映射器而不是spring映射器。这个解决方案有效。不知何故,这个问题并没有出现在我的搜索中,或者它可以帮我省下不少困惑。
@Configuration
public class WebConfiguration extends WebMvcAutoConfiguration {
@Primary
@Bean
public ObjectMapper mapper() {
final ObjectMapper objectMapper = new ObjectMapper();
objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
return objectMapper;
}
}
package com.my.spring;
import javax.ws.rs.ext.ContextResolver;
import org.glassfish.jersey.server.ResourceConfig;
import org.glassfish.jersey.servlet.ServletProperties;
import org.springframework.context.annotation.Configuration;
import com.my.spring.service.rs.MyRestServiceImpl;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.databind.ObjectMapper;
@Configuration
public class JerseyConfiguration extends ResourceConfig {
public class ObjectMapperContextResolver implements ContextResolver<ObjectMapper> {
private final ObjectMapper mapper;
public ObjectMapperContextResolver() {
mapper = new ObjectMapper();
mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
}
@Override
public ObjectMapper getContext(Class<?> type) {
return mapper;
}
}
public JerseyConfiguration() {
register(new ObjectMapperContextResolver());
register(MyRestServiceImpl.class); // My jax-rs implementation class
property(ServletProperties.FILTER_FORWARD_ON_404, true); // Not needed for this non_null issue
}
}
public JerseyConfig extends ResourceConfig {
public JerseyConfig() {
...
register(ObjectMapperContextResolver.class);
}
}