我有两个Java类,我想使用Jackson序列化为JSON:
public class User {
public final int id;
public final String name;
public User(int id, String name) {
this.id = id;
this.name = name;
}
}
public class Item {
public final int id;
public final String itemNr;
public final User createdBy;
public Item(int id, String itemNr, User createdBy) {
this.id = id;
this.itemNr = itemNr;
this.createdBy = createdBy;
}
}
Run Code Online (Sandbox Code Playgroud)
我想将Item序列化为此JSON:
{"id":7, "itemNr":"TEST", "createdBy":3}
Run Code Online (Sandbox Code Playgroud)
用户序列化只包括id.我还可以将所有用户对象serilize为JSON,如:
{"id":3, "name": "Jonas", "email": "jonas@example.com"}
Run Code Online (Sandbox Code Playgroud)
所以我想我需要编写一个自定义序列化器Item并尝试使用它:
public class ItemSerializer …Run Code Online (Sandbox Code Playgroud) 我知道如何在Jackson中使用自定义序列化程序(通过扩展JsonSerializer),但我希望默认的序列化程序适用于所有字段,除了1个字段,我想使用自定义序列化程序覆盖它.
注释不是一个选项,因为我正在序列化生成的类(来自Thrift).
在编写自定义jackson序列化程序时,如何仅指定要覆盖的某些字段?
更新:
这是我要序列化的类:
class Student {
int age;
String firstName;
String lastName;
double average;
int numSubjects
// .. more such properties ...
}
Run Code Online (Sandbox Code Playgroud)
上面的类有许多特性,其中大多数使用本机类型.我想覆盖自定义序列化程序中的一些属性,让Jackson像往常一样处理其余的属性.例如,我只想将"年龄"字段转换为自定义输出.