У меня проблема с сериализацией списка моделей пользователей с разными настройками конфиденциальности.
Допустим, моя UserModel выглядит так:
public class UserModel {
@JsonView(Privacy.Views.Restricted.class)
public Integer id;
@JsonView(Privacy.Views.Public.class)
public String email;
}
Следующий код возвращает один пользователь правильно:
MappingJacksonValue value = new MappingJacksonValue(model);
value.setSerializationView(model.getViewClass());
return new ResponseEntity<>(value, OK);
Если getViewClass возвращает Privacy.Views.Restricted.class, вывод будет:
{
"id": 1
}
Если getViewClass возвращает Privacy.Views.Publi c .class, вывод:
{
"id": 1,
"email" "hello@example.com"
}
Но теперь я хочу вернуть список пользователей, где у каждого пользователя могут быть разные настройки конфиденциальности. Но выполнение
List<MappingJacksonValue> list = new ArrayList<>();
MappingJacksonValue value = new MappingJacksonValue(model);
value.setSerializationView(model.getViewClass());
list.add(value);
return new ResponseEntity<>(list, OK);
дает мне:
[
{
"value": {
"id": 1,
"email": "test@example.com"
},
"serializationView": "Privacy$Views$Restricted",
"filters": null
}
]
Кажется очевидным, что JacksonValueMapper не обрабатывается в списке, но я не могу найти другое решение, дающее результат выглядят так, в зависимости от установленного вида:
[
{
"id": 1
},
{
"id": 2,
"email": "hello@example.com"
}
]