Почему Swagger создал поле systemId в примере?
У меня есть функция REST POST, которая имеет следующий заголовок:
@POST
@Consumes(value = { MediaType.APPLICATION_JSON + ";charset=utf-8" })
@Produces(value = { MediaType.APPLICATION_JSON + ";charset=utf-8" })
@ApiOperation(value = "Create a document type", notes = "creates a document type from Json and returns the created type", response = Response.class)
@Session(roles = { Role.ROLE_ADMINISTRATOR })
@PublicApi
public Response create(
@ApiParam(value = "Created DocumentType", required = true)
@SwaggerDataType(type =
com.infor.daf.icp.internal.rest.models.DocumentType.class)
com.infor.daf.icp.internal.rest.models.DocumentType documentType) {
Когда я смотрю на него в пользовательском интерфейсе Swagger, Swagger создает образец тела запроса. Этот орган имеет
systemId (string, optional),
в представлении модели и
systemId : "string"
в представлении JSON. Но во всем проекте нет поля с именем systemId
. Я проверил класс запроса и его предков один за другим, а весь проект выполнил поиск Java. Эта система символов systemId
не появляется даже как подстрока другого имени.
Где Swagger получает это имя и как я могу его остановить? Конечно, я хочу, чтобы он создал правильный пример.
Редактировать: сама функция API принимает вход JSON без проблем и правильно составляет объект объявленного класса.
Импорт:
package com....documentarchive.rest.v1
import javax.servlet.http.HttpServletRequest;
import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
Интерфейс Swagger выглядит так:
Изменить 2.
Я удалил @SwaggerDataType или заменил его на @RequestBody, но странное поведение остается.
Я установил пример, который будет показан как конкретная строка с реальными данными:
@ApiParam(example = DOC_TYPE_EXAMPLE, value = "Created DocumentType", required = true) @RequestBody com.infor.daf.icp.internal.rest.models.DocumentType documentType) {
....
static final private String DOC_TYPE_EXAMPLE = "{'entityModel':\n" +
" {'name':'Anatemplate',\n" +
" 'desc':'Ana-template',\n" +
И даже это не помогло! Swagger по-прежнему генерирует какую-то бессмысленную строку из какого-то отдаленного файла (спасибо @xpa1492 для ссылки) где-то в Интернете, вместо того, чтобы просто показывать подготовленную строку.
Другие изменения:
Файл pom: https://drive.google.com/file/d/16fOCq5EFZYVBJRPg0HeiP102eRzEaH6W/view?usp=sharing
Ответы
Ответ 1
Кажется, ответили здесь: https://github.com/kongchen/swagger-maven-plugin/issues/608
Конфигурация Swagger не загружала модуль аннотаций Джексона, игнорируя все используемые аннотации. Поэтому ApiReader читал не тот класс (https://docs.oracle.com/javase/8/docs/api/org/w3c/dom/DocumentType.html).