Jackson - 使用对象作为数组的键序列化映射

问题描述 投票:0回答:1

我正在将我的 Quarkus 应用程序从使用 Json-B 迁移到 Jackson。现在我对 Jackson 和 Json-B 序列化 Map 的方式有所不同,其中 key 是一些 Java 对象。

传输对象示例:

public class Car {
  private Integer id;
  private String color;

  public Integer getId() {
    return id;
  }

  public void setId(Integer id) {
    this.id = id;
  }

  public String getColor() {
    return color;
  }

  public void setColor(String color) {
    this.color = color;
  }
}

我的资源示例:

@GET
@Path("/test")
public Map<Car, String> test() {
  Car car = new Car();
  car.setId(1);
  car.setColor("Red");
    
  Map<Car, String> map = new HashMap<>();
  map.put(car, "First");
  return map;
}

Jackson 的序列化结果是(仅使用 toString() 来序列化 Car 对象:

{
    "com.example.app.dto.Car@42773f1c": "First"
}

使用Json-B序列化的结果是:

[
    {
        "key": {
            "color": "Red",
            "id": 1
        },
        "value": "First"
    }
]

是否有任何 Jackson 配置可以实现与 Json-B 提供的 Jackson 相同的结果,并且映射以键作为对象? 我可以使用自定义序列化器针对这个特定情况实现它,但我需要一个通用的解决方案。

jackson quarkus jsonb jackson-databind quarkus-rest-client
1个回答
0
投票

为您的

Car
对象使用自定义杰克逊序列化器,并将其注册到
io.quarkus.jackson.ObjectMapperCustomizer

您可以在官方指南

找到所有信息
© www.soinside.com 2019 - 2024. All rights reserved.