java - 当不包含可选查询时 Swagger 抛出 400 错误

标签 java spring url swagger

我在 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/

相关文章:

Java:隐式类型转换,或隐式 toString() 调用

java - Spring 批处理 : Tasklet without ItemWriter

php - 如何获取上传到 FTP 服务器的文件的 HTTP URL

javascript - 加载页面并在 url 中执行 javascript

java - REST API 插件 - 使用正文而不是查询字符串作为参数

java - 如何在java中清除/清空字符串值

javascript - 升级到 Spring 4.3.0,静态 JS 文件现在作为 'application/octet-stream' 而不是 Spring 4.2.6 中的 'application/javascript'

node.js - 在 expressjs 中更改 res.redirect 上的 url

java - 无法理解为什么这个 Java 程序会产生这样的输出

java - 关于步骤之间数据的 Spring Batch 最佳实践