1、概述
大家好,我是欧阳方超。
今天这个事情还要从一个现象说起,往下看吧。
在使用swagger时进行接口管理时,在SwaggerConfig类中使用@Bean定义的一组接口在swagger页面中始终找不到,并伴随着下面的报错日志:
2022-02-19 17:31:34.343 ERROR 9260 --- [ main] d.s.w.p.DocumentationPluginsBootstrapper : Unable to scan documentation context 商品列表接口
java.lang.IllegalArgumentException: No enum constant springfox.documentation.service.ParameterType.USER
at java.lang.Enum.valueOf(Enum.java:238)
at springfox.documentation.service.ParameterType.valueOf(ParameterType.java:6)
at springfox.documentation.builders.ParameterBuilder.parameterType(ParameterBuilder.java:170)
at springfox.documentation.swagger.readers.operation.OperationImplicitParameterReader.implicitParameter(OperationImplicitParameterReader.java:108)
at springfox.documentation.swagger.readers.operation.OperationImplicitParametersReader.readParameters(OperationImplicitParametersReader.java:83)
at springfox.documentation.swagger.readers.operation.OperationImplicitParametersReader.apply(OperationImplicitParametersReader.java:57)
at springfox.documentation.spring.web.plugins.DocumentationPluginsManager.operation(DocumentationPluginsManager.java:144)
at springfox.documentation.spring.web.readers.operation.ApiOperationReader.read(ApiOperationReader.java:72)
at springfox.documentation.spring.web.scanners.CachingOperationReader.lambda$new$0(CachingOperationReader.java:43)
2、问题分析
看报错日志的第一行,“Unable to scan documentation context”,大意为不能扫描文档上下文,再看Controller中,定义“商品列表接口”的地方,在@ApiImplicitParam注解中paramType写成了"user",这是顺手写错的一个值,而在swagger中paramType的值只有固定的枚举值,如下所示源码,所以导致对该Controller下的所有接口都无法生成接口文档。
package springfox.documentation.service;
import java.util.Arrays;
import java.util.Objects;
public enum ParameterType {
QUERY("query"),
HEADER("header"),
PATH("path"),
COOKIE("cookie"),
FORM("form"),
FORMDATA("formData"),
BODY("body");
private String in;
private ParameterType(String in) {
this.in = in;
}
public String getIn() {
return this.in;
}
public static ParameterType from(String value) {
return (ParameterType)Arrays.stream(values()).filter((each) -> {
return Objects.equals(each.in, value);
}).findFirst().orElse((Object)null);
}
}
3、问题解决
知道了问题发生的原因, 修改一个代码中paramType的值即可,按照我的使用场景,此处应该为query,再次启动项目,问题解决。