1号
@ApiOperation("保存日志")
@PostMapping("/saveLog")
@Override
public ApiResult saveLog(@RequestBody Req req) {
return logManager.saveLog(req);
}
2号
@Async @Override public ApiResultsaveLog(Req req) { logService.saveBusinessLog(); return ApiResult.success(Boolean.TRUE); }
3号
@RestControllerAdvice
@Order(-2147483628)
@ConditionalOnProperty(prefix = "response.wrap",name = "enabled",matchIfMissing = true)
@Slf4j
public class ResponseWrapHandler implements ResponseBodyAdvice {
@Override
public boolean supports(MethodParameter returnType, Class converterType) {
return true;
}
@Override
public Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType, Class selectedConverterType, ServerHttpRequest request, ServerHttpResponse response) {
if (body instanceof ApiResult
||returnType.hasMethodAnnotation(SkipWrap.class)
||body instanceof String
||HttpContext.isFeignRequest()
|| PathMatchUtil.match(MainClassConstant.SWAGGER_URL, HttpContext.getRequest().getServletPath())
){
return body;
}
return ApiResult.success(body);
}
}
此时,1号返回的是:
{
"success": true,
"code": "200",
"msg": "请求成功",
"traceId": "",
"data": null
}
@ApiOperation("保存日志")
@PostMapping("/saveLog")
@Override
public ApiResult
saveLog(@RequestBody Req req) { logManager.saveLog(req);
return ApiResult.success(Boolean.TRUE);
}
{
"success": true,
"code": "200",
"msg": "请求成功",
"traceId": "",
"data": true
}
代码执行顺序:
1号 -》3号 -》2号
2号中抛出异常也不会对1号有任务影响