Класс модели:
@JsonInclude(JsonInclude.Include.NON_NULL)
public class AccountPojo implements Serializable {
@JsonView(JsonViews.AccountsPermissions.class)
private Integer id;
@JsonView(JsonViews.AccountsPermissions.class)
private String username;
@JsonView({JsonViews.AccountsPermissions.class,
JsonViews.AccountProfile.class})
private String firstName;
@JsonView({JsonViews.AccountsPermissions.class,JsonViews.AccountProfile.class})
private String lastName;
...
Перед сериализацией AccountPojo (toString) имеет вид:
AccountPojo (id: 1, username: xyz, firstName: xyz, lastName: null, ...)
Сериализация:
ObjectMapper mapper = new ObjectMapper();
mapper.disable(MapperFeature.DEFAULT_VIEW_INCLUSION);
String serialized;
try {
serialized = mapper.writerWithView(JsonViews.AccountProfile.class).writeValueAsString(accountPojo);
...
После сериализации я получаю:
{
"firstName":"xyz",
"lastName":"null",
...
}
Представления работают так, как и ожидалось - поскольку я присвоил mapper.writerWithView()
соответствующий класс, только поля, отмеченные JsonViews.AccountProfile.class
, сериализуются.
Проблема в том, что null
интерпретируется как "null"
.
Что не работает:
mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
- досадно, что
Gson
дает тот же результат, например:
Gson gson = new Gson();
serialized2 = gson.toJson(accountPojo);
То, что я ищу, - это предпочтительно исключить поля со значениями null
в сериализации или, по крайней мере,имеют значения null
вместо "null"
.