Сериализировать Джексона, установив тип по умолчанию для pojo

avatar
shweta
9 августа 2021 в 02:04
178
2
0

У меня есть pojo, как показано ниже:

@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, include = JsonTypeInfo.As.PROPERTY, property = @class)
public class Shape {

public final String abc;
public final String xyz;

}

Rest API принимает объект Shape в качестве параметра, при этом я должен передать объект следующим образом:

{ @class = com.test.Shape, abc = "test1", xyz = "test2"}.

Я хочу, чтобы json передавался как

{ abc = "test1", xyz = "test2"}

По сути, я хочу десериализовать pojo без передачи ключа @class.

Источник

Ответы (2)

avatar
shweta
12 августа 2021 в 09:20
1

Мне удалось решить эту проблему, добавив свойство sprint в файл конфигурации:

spring.jackson.mapper.USE_BASE_TYPE_AS_DEFAULT_IMPL: true

Ниже приведена ссылка на то же самое: https://docs.spring.io/spring-boot/docs/current/reference/html/howto.html#howto.spring-mvc.customize-jackson-objectmapper

avatar
xuanzjie
9 августа 2021 в 02:23
0

В Rest API вы можете поместить @RequestBody @Validated перед параметром Shape. лайк

    @PostMapping("/test")
    public void api(@RequestBody @Validated Shape shape){
    todo
    }

Следует отметить, что @RequestBody должен вступить в силу после почтового запроса

shweta
9 августа 2021 в 17:30
0

Это не сработало. что-нибудь еще, вы можете предложить мне искать?

xuanzjie
10 августа 2021 в 01:23
0

Извините, что не привел идеальный пример, теперь вы можете прочитать его еще раз. Ниже приводится описание официального веб-сайта, вы также можете прочитать его очень гладко.

shweta
10 августа 2021 в 02:18
0

Я не уверен, что мой вопрос ясен, немного отредактировал его. Я не хочу, чтобы пользовательский интерфейс проходил "@class=classname". Это решение, похоже, не работает, и URL-адрес, которым вы поделились, не содержит никаких подробностей, связанных с проблемой.

xuanzjie
10 августа 2021 в 03:12
0

Я точно понимаю, что вы хотите, и я немного протестировал это, пример действительно не проблема. Аннотация @RequestBody сопоставляет тело HttpRequest с объектом передачи или домена, обеспечивая автоматическую десериализацию входящего тела HttpRequest в объект Java. Таким образом, вам не нужно указывать соответствующий класс, например "@class=classname"