Ran*_*ray 23 java serialization jackson
我Item上课了.itemType该类中有一个类型为ItemType 的字段.
粗略地,这样的事情.
class Item
{
int id;
ItemType itemType;
}
class ItemType
{
String name;
int somethingElse;
}
Run Code Online (Sandbox Code Playgroud)
当我Item使用Jackson ObjectMapper序列化类型的对象时,它将对象序列化为ItemType子对象.这是预期的,但不是我想要的.
{
"id": 4,
"itemType": {
"name": "Coupon",
"somethingElse": 1
}
}
Run Code Online (Sandbox Code Playgroud)
我想这样做是显示itemType的name序列化时,现场来代替.
像下面的东西.
{
"id": 4,
"itemType": "Coupon"
}
Run Code Online (Sandbox Code Playgroud)
无论如何都要指示杰克逊这样做吗?
Sta*_*Man 23
查看@JsonValue注释.
编辑:像这样:
class ItemType
{
@JsonValue
public String name;
public int somethingElse;
}
Run Code Online (Sandbox Code Playgroud)
pin*_*33n 17
您需要创建和使用自定义序列化程序.
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;
}
Run Code Online (Sandbox Code Playgroud)
由于OP只想序列化一个字段,因此您还可以使用@JsonIdentityInfo和@JsonIdentityReference注释:
class Item {
int id;
@JsonIdentityInfo(generator=ObjectIdGenerators.PropertyGenerator.class, property="name")
@JsonIdentityReference(alwaysAsId=true)
ItemType itemType;
}
Run Code Online (Sandbox Code Playgroud)
有关更多信息,请参阅如何仅序列化 Jackson 孩子的 ID。
| 归档时间: |
|
| 查看次数: |
12619 次 |
| 最近记录: |