如何指示 Jackson 序列化对象内的字段,而不是对象本身?

2022-09-01 10:26:35

我有一个班级。该类中有一个字段,其类型为 ItemType。ItemitemType

粗略地说,像这样的东西。

class Item
{
   int id;
   ItemType itemType;
}

class ItemType
{
   String name;
   int somethingElse;
}

当我使用 Jackson 序列化一个类型的对象时,它会将该对象序列化为子对象。这是意料之中的,但不是我想要的。ItemObjectMapperItemType

{
  "id": 4,  
  "itemType": {
    "name": "Coupon",
    "somethingElse": 1
  }
}

我想做的是在序列化时显示 的字段。itemTypename

如下所示。

{
  "id": 4,  
  "itemType": "Coupon"
}

有没有办法指示杰克逊这样做?


答案 1

查看注释。@JsonValue

编辑:像这样:

class ItemType
{
  @JsonValue
  public String name;

  public int somethingElse;
}

答案 2

您需要创建并使用自定义序列化程序

public class ItemTypeSerializer extends JsonSerializer<ItemType> 
{
    @Override
    public void serialize(ItemType value, JsonGenerator jgen, 
                    SerializerProvider provider) 
                    throws IOException, JsonProcessingException 
    {
        jgen.writeString(value.name);
    }

}

@JsonSerialize(using = ItemTypeSerializer.class)
class ItemType
{
    String name;
    int somethingElse;
}