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

Spring中如何定制JSON返回:剔除冗余ID、将method下mash_temp提升至顶层

实现方案分为两种常用形式,可根据你的项目情况选择:

方案1:使用Jackson注解快速实现(无业务侵入,适配快速迭代场景)

Spring默认使用Jackson做JSON序列化,仅需给实体类加少量注解即可调整返回结构,无需修改原有业务查询逻辑:

  1. 在Beer类中忽略method字段序列化,新增方法直接透出mash_temp字段:
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import java.util.Collections;

public class Beer {
    private Long id;
    private String name;
    private String description;
    @JsonIgnore // 序列化时直接过滤掉method字段
    private Method method;

    // 序列化时会自动将该方法返回值映射为顶层的mash_temp字段
    @JsonProperty("mash_temp")
    public List<MashTemp> getMashTemp() {
        // 空指针防护
        return method != null ? method.getMashTemp() : Collections.emptyList();
    }

    // 原有其余getter、setter保留即可
}
  1. 在MashTemp类中忽略id字段的序列化:
import com.fasterxml.jackson.annotation.JsonIgnore;

public class MashTemp {
    @JsonIgnore // 序列化时直接过滤掉id字段
    private Long id;
    private Temp temp;

    // 原有其余getter、setter保留即可
}

注意:注解需导入com.fasterxml.jackson.annotation包下的对应类,Spring Boot默认集成Jackson无需额外引入依赖。

方案2:使用DTO做结构映射(解耦分层,适配大型长期维护项目)

专门定义接口返回用的DTO类,结构完全对齐预期返回格式,业务层将数据库映射的实体类转为DTO后再返回给前端:

  1. 定义DTO结构:
// 啤酒接口返回对象
public class BeerDTO {
    private Long id;
    private String name;
    private String description;
    private List<MashTempDTO> mash_temp;
    // 补充getter、setter
}

// 糖化温度返回对象,不定义id字段自然不会返回
public class MashTempDTO {
    private Temp temp;
    // 补充getter、setter
}
  1. 业务层做实体转换:可以手动写转换逻辑,也可以用MapStruct等工具自动生成转换代码,后续调整接口返回结构仅需修改DTO,不会影响底层实体类和数据库映射逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 01:30:02