最近在工做中遇到一个问题:咱们正在开发的项目要求新版本之后的接口返回值要加密,而且要兼容之前老版本的接口(就是老版本接口不加密)。之前有个项目却是有过相似的作法,使用的是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的扩展性仍是挺强大的。加密