【问题标题】:How to avoid null objects in my REST JSON response?如何在我的 REST JSON 响应中避免空对象?
【发布时间】:2019-11-10 02:11:55
【问题描述】:

我在我的 JSON 响应中得到了类似的东西(我在 SpringBoot 中有一个 REST 实现):

"estimatedDeliveryTimeWindow":{  
  "window":{}
}

我已经设置了自定义 HTTPMessageCONverters 并像这样配置了 objectMapper:

objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
objectMapper.setSerializationInclusion(JsonInclude.Include.NON_EMPTY);

还尝试使用以下代码删除默认转换器:

@Bean
public HttpMessageConverters converters() {
        MappingJackson2HttpMessageConverter jsonConverter = new MappingJackson2HttpMessageConverter();
        ObjectMapper objectMapper = new ObjectMapper();
        objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
        objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
        objectMapper.setSerializationInclusion(JsonInclude.Include.NON_EMPTY);
        jsonConverter.setObjectMapper(objectMapper);
        return new HttpMessageConverters(false, Arrays.asList(jsonConverter));
}

似乎没有任何效果。我仍然在对象中看到空对象。这些对象是嵌套有原始类型和自定义对象的复杂对象。我还能尝试什么?

【问题讨论】:

标签: json spring-boot jackson


【解决方案1】:

请在类文件前添加@JsonInclude(Include.NON_NULL)

@JsonInclude(Include.NON_NULL)
public class MobileLoginVO {

    private String otpDetailsId;

    public String getOtpDetailsId() {
        return otpDetailsId;
    }

    public void setOtpDetailsId(String otpDetailsId) {
        this.otpDetailsId = otpDetailsId;
    }

}

【讨论】:

    【解决方案2】:

    您需要以某种方式通知 Spring 使用您的消息转换器。

    这应该可以完成工作:

    import com.fasterxml.jackson.annotation.JsonInclude;
    import com.fasterxml.jackson.databind.DeserializationFeature;
    import com.fasterxml.jackson.databind.ObjectMapper;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.http.converter.HttpMessageConverter;
    import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
    import org.springframework.web.servlet.config.annotation.EnableWebMvc;
    import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
    
    import java.util.List;
    
    @Configuration
    @EnableWebMvc
    public class WebConfig implements WebMvcConfigurer {
    
        public MappingJackson2HttpMessageConverter messageConverter() {
            MappingJackson2HttpMessageConverter jsonConverter = new MappingJackson2HttpMessageConverter();
            ObjectMapper objectMapper = new ObjectMapper();
            objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
            objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
            objectMapper.setSerializationInclusion(JsonInclude.Include.NON_EMPTY);
            jsonConverter.setObjectMapper(objectMapper);
    
            return jsonConverter;
        }
    
        @Override
        public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
            converters.add(messageConverter());
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2021-08-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-12
      • 1970-01-01
      • 2012-09-24
      • 2020-01-25
      相关资源
      最近更新 更多