springboot处理响应json

返回
Author Avatar
钢翼
2020-12-23
编程
43

用springboot,我们一般都是用

@ResponseBody
//或者
@RestController

注解控制器,来实现直接返回对象。框架默认会用jackson序列化对象并返回给前端 。
有时我们需要统一处理响应报文json,比如加密或处理其他的逻辑。
如果我们用拦截器和过滤器,由于json已经写到response里面去了,所以我们没法操作。这个时候就需要用到ResponseBodyAdvice了。代码如下

@Component
@ControllerAdvice
public class MyResponseBodyAdvice implements ResponseBodyAdvice {
    @Override
    public boolean supports(MethodParameter methodParameter, Class aClass) {
        return true;
    }
    @Override
    public Object beforeBodyWrite(Object o, MethodParameter methodParameter, MediaType mediaType, Class aClass, ServerHttpRequest serverHttpRequest, ServerHttpResponse serverHttpResponse) {
        //在这里处理对象o并返回处理后的新对象即可。
        //可以通过 methodParameter.getMethodAnnotation 方法获取控制器方法上的注解。
        return o;
    }

}