最近在工做中遇到一個問題:咱們正在開發的項目要求新版本之後的接口返回值要加密,而且要兼容之前老版本的接口(就是老版本接口不加密)。之前有個項目卻是有過相似的作法,使用的是aop實現。aop當然可以達到實現,但查看spring文檔就會發現,spring早就爲咱們預留了實現接口,比aop更加方便。spring
spring的實現是ResponseBodyAdvice,顧名思義,請求返回值加強。json
實現以下:ide
@ControllerAdvice(basePackages = "com.test") public class EncryptResponseAdvice implements ResponseBodyAdvice<Object> { @Override public boolean supports(MethodParameter returnType, Class<? extends HttpMessageConverter<?>> converterType) { return true; } @Override public Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType, Class<? extends HttpMessageConverter<?>> selectedConverterType, ServerHttpRequest request, ServerHttpResponse response) { //先作版本判斷,而後加密處理 return body; } }
ResponseBodyAdvice還能夠實現jsonp,具體的類spring已經存在。jsonp
其實aop也徹底能夠實現,但既然spring已經提供了此功能,就最好用它的。不得不說,spring的擴展性仍是挺強大的。加密