springfox swagger 请求参数类型设置
解析类:springfox.documentation.spring.web.readers.parameter.ParameterTypeReader
根据代码逻辑整理了一个表格
条件 | 对应parmType |
---|---|
有@PathVariable 注解 |
path |
有@RequestBody 注解 |
body |
有@RequestPart 注解 |
formData |
有@RequestHeader 注解 |
header |
有@RequestParam 注解 |
解析方式和无注解时一致 |
参数类型为MultipartFile 或被Collection\Array等包装的MultipartFile |
form |
无任何注解consumes包含application/x-www-form-urlencoded 且接口类型为post |
form |
无任何注解consumes包含multipart/form-data 且接口类型为post |
formData |
无任何注解且不满足上述2个条件 | query |
不符合上述任何条件 | body |
到这里发现问题,我的接口参数很多都只有@ApiParam
这一个注解来描述参数意义,这样就会都走到最后返回默认的body
,导致接口发生问题,而正确的类型应该是query
,由上表看来,使paramType变为query的方式有2种
application/x-www-form-urlencoded
和multipart/form-data
@RequestParam
注解,consumes不包含application/x-www-form-urlencoded
和multipart/form-data
consumes我就没设置过,所以只能使用@RequestParam
注解来使paramType变为query
,但是每个接口都要加,这么大(xiao)的工作量我能妥协吗? 显然不能!
于是自定义CustomParameterTypeReader
修改默认的返回值为query
,然后@Component、@Order
作为bean并将优先级调至最低(@Order默认的就是最大值),因为swagger插件的顺序是使用AnnotationAwareOrderComparator
来排序的,这样,在原有的ParameterTypeReader配置paramType之后,我们自定义的CustomParameterTypeReader
将覆盖paramType,实现最终目的
地址:https://www.leftso.com/article/1051.html