ジャクソンには、直列化および直列化復元時にフィールドをフィルタリングするのに役立つSimpleBeanPropertyFilterという名前のクラスがあります。グローバルではありません。それがあなたの望んだことだと思います。
@JsonFilter("custom_serializer")
class User {
private String password;
//setter, getter..
}
次に、コードで:
String[] fieldsToSkip = new String[] { "password" };
ObjectMapper mapper = new ObjectMapper();
final SimpleFilterProvider filter = new SimpleFilterProvider();
filter.addFilter("custom_serializer",
SimpleBeanPropertyFilter.serializeAllExcept(fieldsToSkip));
mapper.setFilters(filter);
String jsonStr = mapper.writeValueAsString(currentUser);
これにより、password
フィールドがシリアル化されなくなります。また、password
フィールドをそのまま逆シリアル化することもできます。ObjectMapperオブジェクトにフィルターが適用されていないことを確認してください。
ObjectMapper mapper = new ObjectMapper();
User user = mapper.readValue(yourJsonStr, User.class); // user object does have non-null password field