ResponseAdvice 没有被触发

ResponseAdvice not getting triggered

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根本不触发。该应用程序完全由注释驱动。通知和控制器都在同一个包中。我错过了什么!

好的。愚蠢的 mistake.The 问题是 supports 方法

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

制作此方法 return TRUE 已解决问题。

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

支持方法应该return true。所以根据你的要求调整你的逻辑。