You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

REST服务输出中相同JSON内容为何被省略?

问题分析与解决方案

嘿,这个问题我之前在项目里碰到过类似的情况,大概率和对象引用重复或者JSON序列化工具的默认配置有关——内容相同只是触发这个现象的诱因,本质不是内容相同本身导致的省略。

常见原因拆解

  • 重复对象引用:如果你是把同一个查询结果对象直接存到Map的两个键下,比如:

    List<YourModel> queryResult = yourRepository.findXXX();
    resultMap.put("firstKey", queryResult);
    resultMap.put("secondKey", queryResult);
    

    这种情况下,Map里的两个值其实指向同一个内存对象。像Jackson这类主流JSON序列化库,默认会检测重复引用的对象,为了避免冗余输出或者循环引用问题,会把后续出现的重复引用替换成...。

  • 序列化工具的重复内容检测:就算你是执行了两次独立查询,但如果返回的对象内容完全一致(甚至连对象引用都不同,但属性值全一样),部分序列化工具的严格模式下也会判定为重复内容,从而省略输出。

对应的解决办法

  1. 确保对象引用独立
    如果是重复引用的问题,你需要为每个Map键生成独立的对象实例,比如手动复制属性或者用Bean拷贝工具:

    List<YourModel> result1 = yourRepository.findXXX();
    // 用BeanUtils或者手动拷贝生成新的对象列表
    List<YourModel> result2 = result1.stream()
        .map(model -> {
            YourModel newModel = new YourModel();
            newModel.setId(model.getId());
            newModel.setName(model.getName());
            // 拷贝所有需要的属性
            return newModel;
        })
        .collect(Collectors.toList());
    resultMap.put("firstKey", result1);
    resultMap.put("secondKey", result2);
    
  2. 调整序列化工具配置
    以Spring Boot常用的Jackson为例,可以关闭重复引用检测的特性:

    • 代码层面配置:
      @Bean
      public ObjectMapper objectMapper() {
          ObjectMapper mapper = new ObjectMapper();
          // 关闭重复引用检测
          mapper.disable(SerializationFeature.USE_EQUALITY_FOR_OBJECT_ID);
          return mapper;
      }
      
    • 配置文件层面(application.properties):
      spring.jackson.serialization.use-equality-for-object-id=false
      

内容的提问来源于stack exchange,提问作者user697911

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 09:09:12