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。所以根据你的要求调整你的逻辑。
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。所以根据你的要求调整你的逻辑。