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

如何修改Panache/Hibernate实体DTO中Jackson序列化的JSON结构?

调整JSON结构:将last_transactions移到avail同级的DTO实现方案

要实现目标JSON结构,核心是创建顶层容器DTO,让avail对象和last_transactions列表成为同级属性,具体步骤如下:

1. 修改原有AvailDTO

移除原AvailDTO中的transactions字段,让它只承载avail对象的核心数据:

@JsonTypeName("avail")
@JsonPropertyOrder({ "total", "dataExtrato", "limit" })
public final class AvailDTO {
    public final Integer total;
    @JsonProperty("data_extrato")
    public final String dataExtrato;
    public final Integer limit;

    // 添加全参构造方法供实例化使用
    public AvailDTO(Integer total, String dataExtrato, Integer limit) {
        this.total = total;
        this.dataExtrato = dataExtrato;
        this.limit = limit;
    }
}

注:原有的@JsonTypeInfo(use=Id.NAME, include=As.WRAPPER_OBJECT)可以保留,它会自动将AvailDTO序列化为{"avail": {...}}的结构。

2. 创建顶层响应DTO

新建一个容器DTO,同时包含AvailDTO和交易列表:

public class AvailResponseDTO {
    public final AvailDTO avail;
    @JsonProperty("last_transactions")
    public final List<Transactions> transactions;

    // 全参构造方法
    public AvailResponseDTO(AvailDTO avail, List<Transactions> transactions) {
        this.avail = avail;
        this.transactions = transactions;
    }
}

3. 业务层组装数据

在接口返回数据时,从Avail实体中拆分数据,组装成顶层DTO:

// 从数据库获取Avail实体(示例代码)
Avail availEntity = Avail.findById(yourEntityId);

// 构造AvailDTO(dataExtrato根据实际业务逻辑生成,比如当前时间)
AvailDTO availDTO = new AvailDTO(
    availEntity.total,
    LocalDateTime.now().format(DateTimeFormatter.ISO_INSTANT),
    availEntity.limit
);

// 构造顶层响应DTO,传入availDTO和实体中的交易列表
AvailResponseDTO responseDTO = new AvailResponseDTO(availDTO, availEntity.transactions);

// 返回responseDTO即可生成目标JSON结构
return responseDTO;

效果验证

序列化后会生成你需要的JSON结构:

{
  "avail": {
    "total": 29000,
    "data_extrato": "2024-02-24T11:50:15.294900Z",
    "limit": 100000
  },
  "last_transactions": [
    {
      "value": 21000,
      "type": "d",
      "description": "withdraw",
      "datetime": "2024-02-24T14:46:00.904000300Z"
    },
    {
      "value": 50000,
      "type": "c",
      "description": "deposit",
      "datetime": "2024-02-24T14:46:17.837816Z"
    }
  ]
}

内容的提问来源于stack exchange,提问作者Márcio C Goulart

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 05:25:56