我在 Spring 中定义了一个端点,并将单个 ApiParam 定义为可选。
@RequestMapping(value = "/searchResult/getList", method = RequestMethod.GET)
@ApiOperation(value = "populate list")
public JasonMessage getList(@ApiParam(name="id", value = "id", required = false)
@RequestParam Integer id) {
但是,当我写的网址没有 ?id=xxx
时参数时,我收到 400 错误,我认为这是格式错误的 Url 错误。
这是为什么呢?我将其定义为 required = false
,而且它不是路径变量,但是如果不包含至少一个空查询参数,我就无法编写 url,例如 ?id=
.
我是否对 URL 的真正可选参数感到困惑,这是 swagger 的问题,spring 的问题,还是我在某个地方犯的错误。
响应正文为no content
响应代码只是 400
.
最佳答案
您需要将注释更改为@RequestParam(required = false)
,必填字段默认为true
。此外,您可以删除 @ApiParam
上的 required
,因为 swagger 会从 Springs 注释中检测到这一点。
请记住,Swagger 注释用于提供有关您的 api 的附加信息,对端点的功能没有影响(在生成的 api 页面之外)。
此外,您应该将请求参数的名称放在 @RequestParam
注释上,这也是因为 Swagger 注释对 Springs 行为没有影响。
您的最终代码应为
@RequestMapping(value = "/searchResult/getList", method = RequestMethod.GET)
@ApiOperation(value = "populate list")
public JasonMessage getList(@ApiParam
@RequestParam(value = "id", required = false) Integer id) {
关于java - 当不包含可选查询时 Swagger 抛出 400 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46102249/