如果你有遇到此问题,相信我这篇博客可以帮你减少一部分工作量,让你专心于业务代码的实现。
在项目中接口里总是会遇到这样一个问题,每次接口返回json数据都要return自己建立的公共返回体。
如我的
)
每个接口都要写这样一句话,虽然就一句,但是我很懒,尤其是重复的代码,我真的不想再写第二遍。然而当时也没有什么更好的方法,只能这样一遍一遍的去写。
1
| return new ResponseResult<>(menuInfoListVo);
|
……………..很久之后,我无意间了解到ResponseBodyAdvice接口,简单的说这个接口可以处理返回body数据,经过在这个方法beforeBodyWrite的二次加工再返回到前端,详细的知识点可以在网上搜索。
实现源码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
| import com.haj.tool.util.ResponseResult; import org.springframework.core.MethodParameter; import org.springframework.http.MediaType; import org.springframework.http.server.ServerHttpRequest; import org.springframework.http.server.ServerHttpResponse; import org.springframework.web.bind.annotation.RestControllerAdvice; import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice;
import java.util.Collection;
@RestControllerAdvice(basePackages = "com.mwk") public class MyResponseBodyAdvice implements ResponseBodyAdvice {
@Override public Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType, Class selectedConverterType, ServerHttpRequest request, ServerHttpResponse response) {
if (body == null) { return new ResponseResult<>(); } if (body instanceof ResponseResult) { return body; }
return new ResponseResult<>().setData(body); }
@Override public boolean supports(MethodParameter returnType, Class converterType) { return true; } }
|
配置完成后,就可以在controller中直接返回vo了。
剩下的工作就交给MyResponseBodyAdvice ,它会帮你自动装载。