Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Json 弹簧护套1.2.5&;2忽略空字段_Json_Jackson_Spring Boot_Jersey 2.0 - Fatal编程技术网

Json 弹簧护套1.2.5&;2忽略空字段

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

在带有Jersey 2接口的Spring boot 1.2.5中,如何将JSON封送器设置为不包含具有空值的字段

例如:

[
    {
        "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);
     }
 }