当前位置: 首页 > 知识库问答 >
问题:

Spring Boot Microservice Jackson JSON序列化NON NULL

卫松
2023-03-14

我目前正在开发一个Spring Boot(版本1.3.1)微服务,它连接到MongoDB后端,并通过控制器向客户端提供后端数据(例如:Provider对象)。

该项目有一个扩展ResourceSupport(例如:ProviderResourceSupport)的类文件,还有一个扩展了ResourceSupportAssembler类(例如:ProviderAssembler)的类,用于生成到响应对象的链接。

理想情况下,我的要求是根据需要定制JSON对象,并使用@JsonView(点击此链接-https://Spring . io/blog/2014/12/02/latest-Jackson-integration-improvements-in-Spring)并在maven项目中添加Spring Jackson依赖项。

我还添加了spring.jackson.serialization inclusion=non-null

对于控制器中的其中一个方法,响应将是“响应实体”

我已经在我的实体对象和控制器上添加了@JsonInclude(Include=NON_NULL ),但是仍然得到' NULL '响应。

我不希望“null”作为响应,如果有人遇到类似的问题,请您帮助我。

共有1个答案

郎灿
2023-03-14

我修复了这个从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>
 类似资料:
  • 我正在尝试使用kryo序列化和反序列化到二进制。我想我已经完成了序列化,但似乎无法反序列化。下面是我正在处理的代码,但最终我想存储一个字节[],然后再次读取它。文档只显示了如何使用文件。

  • 问题内容: 我尝试过在Java和Android之间实现跨平台序列化。我使用了Serializable,并将我的代码在Android中与台式机Java放在同一软件包中。 来源:java-desktop序列化 资料来源:Android-反序列化 学生是一类,实现了Serializable。在桌面上,我将学生实例序列化为“ thestudent.dat”。我将此文件放在Android设备上的SD卡上,并

  • 问题内容: 我注意到存储在Redis中的某些序列化对象在反序列化方面遇到问题。 当我对Redis中存储的对象类进行更改时,通常会发生这种情况。 我想了解问题,以便为解决方案设计一个清晰的方案。 我的问题是,什么导致反序列化问题?移除公共/私人财产会引起问题吗?也许添加新属性?向类添加新功能会产生问题吗?那么更多的构造函数呢? 在我的序列化对象中,我有一个属性Map,如果我更改(更新了一些属性,添加

  • 问题内容: Golang中将结构序列化和反序列化为字符串的最佳方法(完整性和性能)是什么,反之亦然? 例如,如果我有这个结构: 我想将其存储在Redis上并取回。我试过保存,整型和字符串,这很好,但是如何存储结构对象? 问题答案: 使用gob和base64可以解决问题,例如: 当您需要序列化自定义结构或类型(例如struct)时,只需添加以下行:

  • 主要内容:1 Java序列化和反序列化,2 Java序列化的优点,3 java.io.Serializable接口,4 Java ObjectOutputStream,5 Java ObjectInputStream,6 Java序列化的例子,7 Java反序列化的例子1 Java序列化和反序列化 Java中的序列化是一种将对象状态写入字节流的机制。它主要用于Hibernate,RMI,JPA,EJB和JMS技术。 序列化的反向操作称为反序列化,其中字节流被转换为对象。序列化和反序列化过程与平台

  • FAQs in section [36]: [36.1]“序列化”是什么东东? [36.2] 如何选择最好的序列化技术? [36.3] 如何决定是要序列化为可读的(“文本”)还是不可读的(“二进制”)格式? or non-human-readable ("binary") format?") [36.4] 如何序列化/反序列化数字,字符,字符串等简单类型? [36.5] 如何读/写简单类型为可读的

  • 上一小节我们学习了 Java 的输入输出流,有了这些前置知识点,我们就可以学习 Java 的序列化了。本小节将介绍什么是序列化、什么是反序列化、序列化有什么作用,Serializable 接口以及 Externalizable 接口,常用序列化工具介绍等内容。 1. 序列化与反序列化 序列化在计算机科学的数据处理中,是指将数据结构或对象状态转换成可取用格式,以留待后续在相同或另一台计算机环境中,能

  • 通常情况下,这种形式是基于文本的,它被用来发送Django的数据,当然,序列化处理的形式也有例外(基于文本或者相反)。 参见 如果您只是想从表中获取一些数据到序列化形式,可以使用dumpdata管理命令。 序列化数据 从最高层面来看,序列化数据是一项非常简单的操作 from django.core import serializers data = serializers.serialize("x