谈谈springmvc的ResponseBodyAdvice

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

相关文章
相关标签/搜索