Идентификатор не должен отображаться для схемы модели с Swagger + Spring

Я использую Swagger2 с Springfox и Spring Boot. У меня конечная точка определена так:

@ApiOperation(value = "save", nickname = "Save Store")
@ApiResponses(value = {
        @ApiResponse(code = 201, message = "Created"),
        @ApiResponse(code = 401, message = "Unauthorized"),
        @ApiResponse(code = 403, message = "Forbidden"),
        @ApiResponse(code = 500, message = "Failure", response = ErrorResource.class)})
@RequestMapping(method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE)
@ResponseStatus(HttpStatus.CREATED)
public void save(@Valid @RequestBody Store store, BindingResult bindingResult, HttpServletRequest request, HttpServletResponse response) {
    if (bindingResult.hasErrors()) {
        throw new InvalidRequestException("Invalid Store", bindingResult);
    }

    this.storeService.save(store);
    response.setHeader("Location", request.getRequestURL().append("/").append(store.getId()).toString());
}

Сгенерированные документы API показывают id из Store в схеме модели. Технически при создании Store JSON не должен содержать id. Я пытаюсь понять, как сказать Swagger / Springfox игнорировать id, но только для этой конечной точки.


person Gregg    schedule 05.05.2016    source источник


Ответы (1)


Вы можете скрыть поле в модели, аннотируя свойство класса с помощью @ApiModelProperty и задав для его свойства hidden значение true.

import io.swagger.annotations.ApiModelProperty;

public class Store {

    @ApiModelProperty(hidden = true)
    private Long id;

}

К сожалению, сделав это, вы скроете поле id на каждой конечной точке, которая использует класс Store в качестве входных данных. Для отображения поля для другой конечной точки потребуется отдельный класс.

person Daniel Olszewski    schedule 06.05.2016
comment
Да, это не то, что мне нужно. Разобрался вчера с помощью @JsonView. Я опубликую свой ответ чуть позже. Спасибо за предложение. - person Gregg; 06.05.2016
comment
Что ты сделал с этим @Gregg? JsonView, похоже, не работает. - person NeilS; 04.01.2017