SpringFox - Скрыть определенные поля в Swagger-ui, которые не требуются для вызова конечной точки - PullRequest
0 голосов
/ 08 февраля 2019

Я хотел бы знать, есть ли способ заставить SpringFox не показывать все поля определенной сущности, которые не требуются при вызове определенной конечной точки.

Например:

Имея следующую сущность:

public class Car {
    long id;
    String name;
    int wheels;
    String type;
    boolean canFly;
}

И следующие конечные точки:

@RequestMapping(method = RequestMethod.GET,
                produces = MediaType.APPLICATION_JSON_VALUE)
public Car get(@RequestParam(value = "carId", required = true) long projectId) {
    return carService.get(carId);
}

@RequestMapping(method = RequestMethod.POST,
                consumes = MediaType.APPLICATION_JSON_VALUE,
                produces = MediaType.APPLICATION_JSON_VALUE)
public Car create(@RequestBody Car car) {
    return carService.create(car);
}

@RequestMapping(method = RequestMethod.PUT,
                consumes = MediaType.APPLICATION_JSON_VALUE,
                produces = MediaType.APPLICATION_JSON_VALUE)
public Car update(@RequestBody Car car) {
    return carService.update(car);
}

Дело в том, что в конечной точке создания автомобиля требуются только имя и колеса, но вдокументация Swagger-ui показывает все поля, как если бы они были обязательны.Я уже пробовал @JsonViews, но Springfox еще не справился с ними.

Есть ли способ избежать этого?

1 Ответ

0 голосов
/ 14 февраля 2019

Используйте @ApiModelProperty (из io.swagger.annotations)

  • С помощью required вы определяете, является ли свойство обязательным или необязательным.
  • С помощью hidden вы можете скрытьсвойство в пользовательском интерфейсе Swagger, однако, если оно установлено, оно возвращается в любом случае.

Например:

public class Car {

    @ApiModelProperty(value = "id", required = true)
    long id;

    @ApiModelProperty(value = "wheels", required = true)
    int wheels;

    @ApiModelProperty(value = "name", hidden = true)
    String name;

    @ApiModelProperty(value = "type", hidden = true)
    String type;

    @ApiModelProperty(value = "canFly", hidden = true)
    boolean canFly;
}

Поскольку вы используете ту же модель для запроса и ответа (с примеромвыше) атрибуты в документации для конечной точки GET также будут скрыты (имейте это в виду).Если вы не хотите такого поведения, используйте отдельные модели.

...