【发布时间】:2019-06-09 14:47:20
【问题描述】:
我在我的 Spring Boot 应用程序中描述了 openapi 文件中的路径。 Openapi 由处理 http 请求的文件 api 类生成。 我也使用 swagger 来构造一个有效的 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 文件?因为这是我唯一定义的。或者还有什么原因?
【问题讨论】:
标签: java spring rest query-parameters openapi