/**
* @Author zf
* @ClassName CustomResponseBodyAdvice.java
* @ProjectName FullCard
*/
@RestControllerAdvice
public class CustomResponseBodyAdvice implements ResponseBodyAdvice<Object> {
@Override
public boolean supports(MethodParameter returnType, Class converterType) {
// 在这里可以根据需要对接口进行过滤,决定是否要进行响应数据的处理
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
String requestUrl = request.getRequestURI();
// 判断当前请求的URL是否在白名单中
List<String> whitelistUrls = whitelistUrls();
if(whitelistUrls.contains(requestUrl)){
return false; // 当前URL在白名单中,不进行响应数据的处理
}
return true;
}
@Override
public Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType, Class selectedConverterType, ServerHttpRequest request, ServerHttpResponse response) {
// 将body转换为JSON对象
JSONObject jsonObj = new JSONObject(body);
// 对接口响应数据进行处理
…… ……
// 返回修改后的响应数据和response
return jsonObj;
}
// 白名单列表
private List whitelistUrls(){
ArrayList<String> list = new ArrayList<>();
list.add("/swagger-resources");
list.add("/v2/api-docs");
return list;
}
}
PS:可以用于接口响应结果进行加密等处理。