Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Spring Jackson - как передать параметр в кастомный сериализатор / 3 сообщений из 3, страница 1 из 1
21.06.2018, 00:54
    #39663330
Maxifly
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring Jackson - как передать параметр в кастомный сериализатор
Есть сервис, обрабатывающий REST запросы.
Результатом запроса должен быть JSON.

В объектах, которые надо сереализовать в JSON есть поле - ну пусть "идентификатор типа".
В результирующем JSON-е этот идентификатор должен раскрыться в два поля ID и NAME.
Н унапример так
Код: plaintext
{"resourceTypeId":1, "name":"наименование типа 1"}
По некоему справочнику.

Для этого я делаю кастомный сериализатор для этого поля.
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
@Component
public class ObjectTypeOapiSerializer extends JsonSerializer<Integer> {

    private ObjectType objectType;

    public ObjectTypeOapiSerializer() {
    }

    @Autowired
    public ObjectTypeOapiSerializer(ObjectType objectType) {
        this.objectType = objectType;
    }

    @Override
    public void serialize(Integer integer, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
        jsonGenerator.writeStartObject();
        jsonGenerator.writeNumberField("resourceTypeId", integer);
        String s = objectType.getTypeNameById(integer);
        jsonGenerator.writeStringField("name", s);
        jsonGenerator.writeEndObject();

    }
}



И связываю его с полем аннотацией

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
public class OAPIObjectInfo {
    @JsonProperty("resourceCode")
    private String code;

    @JsonProperty("type")
    @JsonSerialize(using = ObjectTypeOapiSerializer.class)
    private Integer type;
}



Проблема в том, что в REST запросе в одном из параметров задается язык, на котором должно быть заполнено поле "name"
Как мне передать идентификатор языка в кастомный сериализатор?
Тем более, что сериализацию я явно не запускаю, а Spring сам по заголовку Accept RESTзапроса понимает что нужно конвертнуть ответ в JSON.
...
Рейтинг: 0 / 0
21.06.2018, 05:17
    #39663348
mad_nazgul
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring Jackson - как передать параметр в кастомный сериализатор
Maxifly,

А может тогда обойтись без кастомного сериализатора?!
Т.е. просто создать модель данных, точь в точь, как нужно отдавать в JSON'е.
Ну и сделать "преобразователь" от вашей модели данных в модель данных для JSON, там то все и учитывать, включая локализацию.
...
Рейтинг: 0 / 0
21.06.2018, 09:57
    #39663415
Maxifly
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring Jackson - как передать параметр в кастомный сериализатор
mad_nazgul,
Да я и сам начал к этому склоняться уже.
Так явно будет проще, чем с сериализаторами мутить.

Но все равно интересно - должна же быть возможность контекст в сериализатор просунуть.

Я уж подумал сделать у рутового класса атрибут с языком.
Потом объявить кастомный сериализатор у рутового класса

и там добраться до
serializerProvider.getConfig().getAttributes()

и в эти атрибуты воткнть свой ключ который взять из атрибута рутового класса.

А потом уж сериализовать дочерние объекты.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Spring Jackson - как передать параметр в кастомный сериализатор / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]