Spring REST API return Список моделей с разными json представлениями - PullRequest
0 голосов
/ 05 мая 2020

У меня проблема с сериализацией списка моделей пользователей с разными настройками конфиденциальности.

Допустим, моя 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"
    }
]
...