Closed lunfangyu closed 1 year ago
为了代码简洁,通常springboot项目都会实现org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice<T> 这个类去做统一响应处理。例如:
org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice<T>
/** * 统一响应结果 */ @Data public class Result<T> implements Serializable { private static final long serialVersionUID = 8925927757015090232L; /** 响应编码 */ private String code; /** 响应消息 */ private String msg; /** 响应数据 */ private T data; } /** * 统一处理响应结果 * 处理后,不需要在Controller层的每个接口返回结果再包一层Result<T> */ @Slf4j @RestControllerAdvice public class ResponseAdvice implements ResponseBodyAdvice<Object> { @Override public boolean supports(MethodParameter returnType, Class converterType) { return true; } @Override public Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType, Class<? extends HttpMessageConverter<?>> selectedConverterType, ServerHttpRequest request, ServerHttpResponse response) { if (body instanceof Result) { return body; } return Result.success(body); } } /** * 测试实体类 */ @Data public class TestDTO implements Serializable { private static final long serialVersionUID = -5026639589154791246L; /** * 名称 * */ private String name; /** * 性别 */ private String gender; } @Slf4j @Validated @RestController @RequestMapping("test") public class TestController { /** * 测试接口 * @return 结果对象 */ @GetMapping public TestDTO test(){ TestDTO entity = new TestDTO(); entity.setGender("男"); return entity; } }
经过统一处理,接口test()最终返回结果如下:
{ "code": "00000", "msg": "成功", "data": { "name": "名称", "gender": "男" } }
理论上对应的接口文档响应结果字段应该是这样的:
但是实际只生成了如下文档:
因此建议插件增加一个结果类型(Result)配置开关,如果开启并配置了这个Result类,当扫描接口返回结果类型时,如果类型是Result类,则直接生成文档;如果不是,则包上这一层Result类,再生成接口文档。 这样,才不会生成错误的接口文档。
目前是支持该功能的,项目下配置文件.yapix中配置项returnWrapType 指定类限定名即可,更多配置项项可见 readme文档
returnWrapType
非常感谢!我试试
为了代码简洁,通常springboot项目都会实现
org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice<T>
这个类去做统一响应处理。例如:经过统一处理,接口test()最终返回结果如下:
理论上对应的接口文档响应结果字段应该是这样的:
但是实际只生成了如下文档:
因此建议插件增加一个结果类型(Result)配置开关,如果开启并配置了这个Result类,当扫描接口返回结果类型时,如果类型是Result类,则直接生成文档;如果不是,则包上这一层Result类,再生成接口文档。 这样,才不会生成错误的接口文档。