Сериализация примеров OpenAPI теряет тип информации запросаJAVA

Программисты JAVA общаются здесь
Anonymous
Сериализация примеров OpenAPI теряет тип информации запроса

Сообщение Anonymous »

У меня есть полиморфный тип запроса, createrequest :
@JsonTypeInfo(
use = JsonTypeInfo.Id.CUSTOM,
include = JsonTypeInfo.As.PROPERTY,
property = "@type")
@JsonTypeIdResolver(SimpleNameIdResolver.class)
public abstract class CreateRequest {
...
}

Он имеет два подтипа, CreateFoorequest и CreateBarrequest . SimpleNameIdresolver эффективно реализует jsontypeinfo.id.simple_name (я не могу обновить версию Джексона прямо сейчас).
Я пишу примеры этих типов запросов на спецификацию OpenAPI с использованием SpringDoc (org.springdoc:springdoc-openapi-ui:1.8.0):
@Override
public void customise(OpenAPI openApi) {
openApi.getComponents()
.addExamples("createFooRequestExample", createFooRequestExample())
...

private Example createFooRequestExample() {
return new Example()
.summary("Create a Foo")
.value(fooExample());
}
< /code>
Я настраиваю примеры в коде, потому что я хочу, чтобы они были «сильно напечатаны», то есть я не хочу самостоятельно управлять JSON. CreateFooreQuestExample () )
[*] CreateFooreQuest (возвращается fooExample () )

Я получаю другой вывод, отличный от сериализации.{
"summary" : "Create a Foo",
"value" : {
"name" : "New year's resolutions",
...
< /code>
от второго: < /p>
{
"@type" : "CreateFooRequest",
"name" : "New year's resolutions",
...

Почему я теряю @type при сериализации примера, который завершает запрос? Я думал, что это может быть потому, что io.swagger.v3.oas.models.examples.example#value объявляется как java.lang.object , но если я попытаюсь повторить это, Casting Fooexample () для возражения (что не должно что -либо):
(что не должно что -либо):
objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString((Object) fooExample())

Я все еще получаю @type в JSON. Но как только он оказался в примере , он перестает работать.private List rules;

...

@JsonTypeInfo(
use = JsonTypeInfo.Id.CUSTOM,
include = JsonTypeInfo.As.PROPERTY,
property = "@type")
@JsonTypeIdResolver(SimpleNameIdResolver.class)
public abstract class Rule {
}

и каждый элемент в массиве правильно сериализуется, чтобы включить свой собственный @type , независимо от того, какой из вышеуказанных вызовов сделан.
"rules" : [ {
"@type" : "BarRule",
...
} ],


Подробнее здесь: https://stackoverflow.com/questions/796 ... he-request

Вернуться в «JAVA»