J’ai une classe d’ Item
. Il y a un champ itemType
intérieur de cette classe qui est de type ItemType.
en gros, quelque chose comme ça.
class Item { int id; ItemType itemType; } class ItemType { Ssortingng name; int somethingElse; }
Lorsque je sérialise un object de type Item
aide de Jackson ObjectMapper
, il sérialise l’object ItemType
tant que sous-object. Ce qui est attendu, mais pas ce que je veux.
{ "id": 4, "itemType": { "name": "Coupon", "somethingElse": 1 } }
Ce que je voudrais faire est de montrer le itemType
de name
itemType
la place quand il est sérialisé.
Quelque chose comme ci-dessous.
{ "id": 4, "itemType": "Coupon" }
Y a-t-il un moyen de demander à Jackson de le faire?
Vous devez créer et utiliser un sérialiseur personnalisé .
public class ItemTypeSerializer extends JsonSerializer { @Override public void serialize(ItemType value, JsonGenerator jgen, SerializerProvider provider) throws IOException, JsonProcessingException { jgen.writeSsortingng(value.name); } } @JsonSerialize(using = ItemTypeSerializer.class) class ItemType { Ssortingng name; int somethingElse; }
Consultez l’annotation @JsonValue
.
EDIT: comme ceci:
class ItemType { @JsonValue public Ssortingng name; public int somethingElse; }
Comme OP souhaite uniquement sérialiser un champ, vous pouvez également utiliser les annotations @JsonIdentityInfo
et @JsonIdentityReference
:
class Item { int id; @JsonIdentityInfo(generator=ObjectIdGenerators.PropertyGenerator.class, property="name") @JsonIdentityReference(alwaysAsId=true) ItemType itemType; }
Pour plus d’informations, voir Comment sérialiser uniquement l’ID d’un enfant avec Jackson .
Une solution rapide consiste peut-être à append un getter supplémentaire à Item
pour renvoyer ItemType.name
et à marquer ItemType
getter avec @JsonIgnore
?
Pour renvoyer une chaîne simple, vous pouvez utiliser par défaut ToSsortingngSerializer sans définir de classes supplémentaires. Mais vous devez définir la méthode toSsortingng () ne renvoyer que cette valeur.
@JsonSerialize(using = ToSsortingngSerializer.class) class ItemType { Ssortingng name; int somethingElse; public Ssortingng toSsortingng(){ return this.name;} }