java - 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根本不会触发。该应用程序完全由注释驱动。建议和控制器都在同一个包中。我错过了什么!
解决方案
行。愚蠢的错误。这里的问题是支持方法
@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。因此,根据您的要求调整您的逻辑。
推荐阅读
- amazon-web-services - 创建自定义成功 AWS API Gateway 模型
- gitignore - 不同项目的嵌套子文件夹中是否需要 .gitignore?
- python - 如何打印已经返回的函数调用的堆栈跟踪?
- oracle - Oracle SQL Developer 命令行 (SQLcl) - 无法启动 Oracle sql.bat (sqlcl)
- javascript - ExtJS - 我怎样才能让一个面板显示在另一个面板中(它当前显示一个空白屏幕)?
- rabbitmq - rabbitmq-message-deduplication 插件
- google-calendar-api - Google 日历中的“主要”calendarId 和其他 calendarId 有什么区别?
- xpath - XPath - 选择带有内部文本的元素,甚至是子元素的文本
- r - 将具有部分匹配名称的列值合并到 R 中的一个分号分隔的字段中
- here-api - HERE 地图自动建议在离线时不会从下载的地图包返回预期结果