首页 > 解决方案 > ResponseAdvice 没有被触发

问题描述

SO中有很多问题,但几乎没有可行的解决方案。

只是一个简单的 ResponseAdvice 实现与 @ControllerAdvice

控制器

@RestController
@ReqeustMapping("/test")
class TestController{
   @RequestMapping( method=GET )
   public String test(){ return "Test"; }
}

建议

@RestControllerAdvice
public class ResponseDecorator implements ResponseBodyAdvice<String> {

    @Autowired
    ObjectMapper mapper;

    @Override
    public boolean supports(MethodParameter returnType,
                            Class<? extends HttpMessageConverter<?>> converterType) {
        return returnType.getParameterType().equals(String.class);
    }

    @Override
    public String beforeBodyWrite(String body,
                                  MethodParameter returnType,
                                  MediaType selectedContentType,
                                  Class<? extends HttpMessageConverter<?>> selectedConverterType,
                                  ServerHttpRequest request,
                                  ServerHttpResponse response) {
      System.out.println ( "Just print this when before sending ");
     return body;
   }
}

beforeBodyWrite根本不会触发。该应用程序完全由注释驱动。建议和控制器都在同一个包中。我错过了什么!

标签: javaspringspring-bootaspect

解决方案


行。愚蠢的错误。这里的问题是支持方法

  @Override
    public boolean supports(MethodParameter returnType,
                            Class<? extends HttpMessageConverter<?>> converterType) {
        return returnType.getParameterType().equals(String.class);
    }

使此方法返回TRUE已解决此问题。

  @Override
    public boolean supports(MethodParameter returnType,
                            Class<? extends HttpMessageConverter<?>> converterType) {
        return true;
    }

支持方法应该返回true。因此,根据您的要求调整您的逻辑。


推荐阅读