Swagger-UI 自定义显示返回状态码
注: Swagger-bootstrap-ui 方法同样
Swagger,作为一个在线文档,是非常好用的,正确的使用这个,可以使我们少些很多接口文档。
1.问题背景:
做为接口文档,那必然是要有,全局错误状态码
说明的功能。
而Swagger在参数,相应,都用相应的注解,同样,在状态码也是有相应的注解的。
默认的状态码,只有200,如下:

2.单接口设置返回状态码
@PostMapping("/login")
@ApiOperation(value = "登录", notes = "")
@ApiOperationSupport(order = 1)
@ApiResponses({
@ApiResponse(code = 1000, message = "非HTTP状态码,返回值JSON code字段值,描述:成功"),
@ApiResponse(code = 401, message = "非HTTP状态码,返回值JSON code字段值,描述:无token")
})
public R<LoginRes> login(@RequestBody @Validated LoginReq req) {
......
return R.ok(login);
}
添加后,如下
虽然达到了目的,但是,这样一个一个方法的添加,显然是不够方便的,所以,看下面全局添加状态码。
这种方法可以适用于单个接口添加特定状态码说明。

3.全局设置状态码
打开Swagger配置类
,找到初始化Docket
的地方。添加如下代码
@Bean
public Docket api(SwaggerProperties swaggerProperties) {
.....................
其他配置这里不过多展示
.....................
List<ResponseMessage> responseMessageList = new ArrayList<>();
Arrays.stream(ErrorEnums.values()).forEach(errorEnums -> {
responseMessageList.add(
new ResponseMessageBuilder().code(errorEnums.getCode()).message(errorEnums.getMsg()).responseModel(
new ModelRef(errorEnums.getMsg())).build()
);
});
return new Docket(DocumentationType.SWAGGER_2)
.globalResponseMessage(RequestMethod.GET, responseMessageList)
.globalResponseMessage(RequestMethod.POST, responseMessageList)
.globalResponseMessage(RequestMethod.PUT, responseMessageList)
.globalResponseMessage(RequestMethod.DELETE, responseMessageList)
......................
其他配置这里不过多展示
......................
.host(swaggerProperties.getHost())
.apiInfo(apiInfo(swaggerProperties)).select()
.apis(RequestHandlerSelectors.basePackage(swaggerProperties.getBasePackage()))
.paths(Predicates.and(Predicates.not(Predicates.or(excludePath)), Predicates.or(basePath)))
.build()
.securitySchemes(securitySchemas())
.securityContexts(Collections.singletonList(securityContext()))
.pathMapping("/");
}
ErrorEnums.java说明
因为,我们的状态码可能经常变动,所以,在这里,我并没有直接把值写死,这样不利于后期维护,所以,选用了枚举类,里面有状态码和说明,可自行更换。