2015-10-15 80 views
1

我没有spring.xml的选项,所以我通过带注释的方法去。SPRING REST:从JSON格式的响应中删除空对象

我有以下REST接口封装:com.dpk.cm.impl.ecommerce.rest 和com.dpk.cm.impl.ecommerce.rest.services

我创建了一个Spring配置类的实现:但似乎我仍然看到我的JSON响应空对象。

下面是我的代码:

@Configuration 
@ComponentScan(basePackages = "com.dpk.cm.impl.ecommerce.rest") 
@EnableWebMvc 
public class SpringConfig extends WebMvcConfigurerAdapter { 


    @Override 
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) { 
     final MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter(); 
     final ObjectMapper objectMapper = new ObjectMapper(); 
     // objectMapper.setSerializationInclusion(Inclusion.NON_EMPTY); 
     objectMapper.setSerializationInclusion(Include.NON_EMPTY);  
     converter.setObjectMapper(objectMapper); 
     converters.add(converter); 
     super.configureMessageConverters(converters); 
    } 
} 

如何删除从JSON对象效应初探空对象。

回答

0

我有类似的要求,但虽然我在春季启动时使用CXF框架,但spring启动时创建的ObjectMapper正在重写配置。因此,我手动创建ObjectMapper,如下所示。

@Bean(name = "objectMapper") 
    public ObjectMapper getObjectMapper() { 
     ObjectMapper mapper = new ObjectMapper(); 
     mapper.configure(
       SerializationFeature.WRITE_SINGLE_ELEM_ARRAYS_UNWRAPPED, false); 
     mapper.configure(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY, 
       true); 
     mapper.setSerializationInclusion(Include.NON_NULL); 
     return mapper; 
    } 
+0

它仍然没有工作。 @Bean功能是必需的 –

0

您可以创建自定义序列化程序,您可以在该对象的序列化中添加条件。

型号

@JsonSerialize(using = IgnoreEmptyPersonSerializer.class) 
public class Person { 

    private String name; 
    private String address; 

    public Person(String name, String address){ 
     this.name = name; 
     this.address = address; 
    } 
    ... 
    //setters and getters 
    ... 
} 

自定义序列

public class IgnoreEmptyPersonSerializer extends JsonSerializer<Person> { 

    @Override 
    public void serialize(Person value, JsonGenerator jgen, SerializerProvider provider) 
      throws IOException, JsonProcessingException { 

     String name = value.getName(); 
     String address = value.getAddress(); 

     //Dont serialize it if it is empty 
     if((name == null || name.trim().equals("")) && 
       (address == null || address.trim().equals(""))){ 
      return; 
     } 

     jgen.writeStartObject(); 
     jgen.writeFieldName("name"); 
     jgen.writeString(value.getName()); 
     jgen.writeFieldName("address"); 
     jgen.writeString(value.getAddress()); 
     jgen.writeEndObject(); 

    } 
}