首页 > 解决方案 > Springboot 应用 ResponseBodyAdvice 未触发

问题描述

我正在尝试使用响应正文建议更新审核条目,但据我所知,它永远不会被执行。我在日志中看到了 bean:

{"timestamp":"2018-08-21T15:48:08.349Z","level":"INFO","thread":"main",
"logger":"org.springframework.data.rest.webmvc.RepositoryRestHandlerAdapter",
"message":"Detected ResponseBodyAdvice bean in responseAuditAdvice","context":"default"}

我的控制器方法如下所示:

@PostMapping(path = "/stage", consumes = {
    "application/json"
}, produces = {
    "application/json"
})
@ResponseBody
public ResponseEntity<?> stage(@Valid @RequestBody StagingDto stagingDto,
                               @RequestHeader(HttpHeaders.USER_AGENT) String userAgent,
                               BindingResult bindingResult) {

我有一个扩展 RequestBodyAdviceAdapter 的 RequestAuditAdvice,它工作正常。此外,如果发生错误流,我也会看到异常建议正在执行。只有响应建议未能触发。有什么建议么?

这是建议豆:

@Slf4j
@RequiredArgsConstructor(onConstructor_ = @Inject)
@ControllerAdvice
public class ResponseAuditAdvice implements ResponseBodyAdvice<Object> {
private final RequestService requestService;

    @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) {
         log.info("Updating audit for response.");
         String ip = new String (request.getRemoteAddress().getAddress().getAddress());
         requestService.auditResponse(ip, 200);
         return body;
    }
}

标签: spring-mvcspring-bootspring-restcontroller

解决方案


推荐阅读