Почему параметр запроса объекта имеет значение null? - PullRequest
0 голосов
/ 15 января 2019

Я описываю путь в файле openapi в моем приложении весенней загрузки. Openapi генерирует класс api файла, который обрабатывает запросы http. Также я использую swagger, который hepls создает действительный URL, где я также могу поместить параметры запроса. Мне интересно, почему, имея весь этот сгенерированный персонал, я получаю нулевой объект вместо ожидаемого.

часть api.yaml

/films:
    get:
      summary: Отфильтрованные фильмы
      operationId: findFilms
      tags: [selections]
      parameters:
        - in: query
          name: filter
          schema:
            type: object
            properties:
              genreId:
                type: integer
              year:
                type: integer
              countryId:
                type: integer
          style: deepObject
          explode: false
      responses:
        200:
          description: successfull response
          content:
            application/json:
              schema:
                $ref: 'list-schemas.yaml#/components/schemas/SelectionTo'

сгенерированный Java-класс

@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")

@Validated
@Api(value = "Selections")
public interface SelectionsApi {

    default Optional<NativeWebRequest> getRequest() {
        return Optional.empty();
    }

    @ApiOperation(value = "Отфильтрованные фильмы", nickname = "findFilms", , response = SelectionTo.class, tags={ "selections", })
    @ApiResponses(value = { 
        @ApiResponse(code = 200, message = "successful response", response = SelectionTo.class) })
    @RequestMapping(value = "/films",
        produces = { "application/json" }, 
        method = RequestMethod.GET)
    default ResponseEntity<SelectionTo> _findFilms(@ApiParam() @Valid @RequestParam(value = "filter", required = false) Filter filter) {
        return findFilms(filter);
    }

    // Override this method
    default ResponseEntity<SelectionTo> findFilms(Filter filter) {
        getRequest().ifPresent(request -> {
            ...
        });
        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);

    }

сгенерированный класс параметров запроса

@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")

public class Filter   {
  @JsonProperty("genreId")
  private Integer genreId = null;

  @JsonProperty("year")
  private Integer year = null;

  @JsonProperty("countryId")
  private Integer countryId = null;

  public Filter genreId(Integer genreId) {
    this.genreId = genreId;
    return this;
  }

реализующий интерфейс

@Override
    public ResponseEntity<SelectionTo> findFilms(Filter filterType) {
        //here filter is null !
        return ResponseEntity.ok(transformer.transform(service.getItemsInfo()));
    }

запрос

http://localhost/films?filter[genreId]=13&filter[year]=2021

Как можно улучшить файл openapi? Потому что это единственное, что я определил. Или в чем еще причина?

1 Ответ

0 голосов
/ 15 января 2019

Попробуйте удалить @RequestParam() из объекта фильтра.

Как это:

default ResponseEntity<SelectionTo> _findFilms(@ApiParam() @Valid Filter filter) {
    return findFilms(filter);
}

Также запрос должен быть http://localhost/films?genreId=13&year=2021

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...