Как я могу изменить тело запроса в Swagger 1.5 на пример JSON тела запроса - PullRequest
1 голос
/ 26 февраля 2020

Текущий вид запроса Swagger

Возможно ли изменить тело

{
  "config": {
    "additionalProp1": {},
    "additionalProp2": {},
    "additionalProp3": {}
  },
  "class": "string"
}

, чтобы оно выглядело как

{
"class": "my.class.com",
"config": {
    "myParam": "",
    "datacenter": "USA",
}

В настоящее время метод выглядит следующим образом:

@POST
@Path("/run")
@Consumes(MediaType.APPLICATION_JSON)
@ApiOperation(value = "Runs a specified job asynchronously",
    notes = "Doesn't work for full tasks.")
public Response createTask(TaskConfig taskConfig) {

TaskConfig - это базовый c класс с двумя переменными-членами

public class TaskConfig {
    @JsonProperty("class")
    @NotNull
    private String clazz;

    private Map<String, Object> config;

Мы используем Swagger 1.5 из этой библиотеки связок Dropwizard Swagger. Я знаю, что 2.0 имеет аннотацию @RequestBody, и я просто хочу убедиться, что это мой единственный вариант, прежде чем я go буду идти по пути обновления.

1 Ответ

1 голос
/ 26 февраля 2020

Даже при использовании @RequestBody нам нужно добавить дополнительную аннотацию в класс TaskConfig.

Мы используем Swagger 2.0.x. Класс TaskConfig будет иметь поля примерно такие:

@Schema(
  description = " My descriptions",
  type = "array",
  example = " {\"myParam\" :\"value\" ,"
      + "\"datacenter\": \"USA\"}")
private Map<String, Object> config;

Аналогично, clazz также можно аннотировать как:

@Schema(description = "The field descrition", example = "true")

И RequestBody аннотация будет выглядеть так:

@RequestBody(
  description = "Description of TaskConfig ",
  content = @Content(schema = @Schema(implementation = TaskConfig .class)))

Я получил результат, показанный на картинке:

enter image description here

...