• 在将对象 => JSON格式时,无法序列化部分属性


    问题现象:

    ssm项目中,一个controller返回Msg对象(自定义对象,包含三个属性,int code;String msg;HashMap map;同时这三个属性都有对应的get和set方法),我的map属性里面放了一个键值对是这样的:key="pageInfo",value=pageInfo(pageInfo对象是mybatis提供的分页插件里的对象),我也为然后利用SpringMVC的@ResponseBody注解自动将Msg对象转化成JSON格式,返回个客户端,但是客户端接收到的json字符串中map属性为空,但是在我的map集合时有数据的。而且,自己手动利用Jackson将Msg对象转化成json格式时,map属性并不为空是有数据的,这是为什么?

    解决方案:

    这个问题可能是因为Jackson在将对象转换为JSON格式时,默认只会序列化对象的非空属性。在你的情况下,由于PageInfo对象是MyBatis提供的,它可能包含一些不可序列化的属性或方法,导致Jackson无法正确地将整个Map对象序列化为JSON。

    为了解决这个问题,你可以尝试在Map属性上添加@JsonAnyGetter注解,它会告诉Jackson在序列化时将Map的所有键值对都包含在JSON中。示例如下:

    1. @JsonAnyGetter
    2. public Map getMap() {
    3. return map;
    4. }

    另外,确保你的Msg对象的所有属性都有对应的getter和setter方法,并且它们的访问级别是public。

    如果上述方法仍然无法解决问题,你可以尝试使用@JsonSerialize注解来自定义Map属性的序列化方式。具体做法是创建一个自定义的Map序列化器,然后将它应用到Map属性上。示例如下:

    1. @JsonSerialize(using = CustomMapSerializer.class)
    2. private Map map;
    1. public class CustomMapSerializer extends JsonSerializer> {
    2. @Override
    3. public void serialize(Map value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
    4. gen.writeStartObject();
    5. for (Map.Entry entry : value.entrySet()) {
    6. gen.writeObjectField(entry.getKey(), entry.getValue());
    7. }
    8. gen.writeEndObject();
    9. }
    10. }

    这样做可以确保Map属性的所有键值对都会被正确地序列化为JSON格式。

  • 相关阅读:
    内网工具viper的介绍与配置简介
    Spring系列14:IoC容器的扩展点
    计算机毕业设计(附源码)python中小型医院综合管理系统
    从头训练RNN语言模型,这样的loss正常吗?
    centos7添加开机自启案例及原理
    阿里巴巴面试题- - -多线程&并发篇(二十九)
    mybatis <if>标签判断“0“不生效
    六、colab训练模型
    Polygon Miden VM中的哈希函数对比
    MyBatis源码基础-常用类-Configuration
  • 原文地址:https://blog.csdn.net/m0_59084856/article/details/133532324