PlayFramework Java环境下请求/响应日志配置失败排查
问题分析与修复方案
你的过滤器无法正常工作,核心问题出在两个地方:
1. HttpFilters构造函数缺少@Inject注解
Guice依赖注入框架要求,需要注入依赖的类必须有带@Inject注解的构造函数,或者无参非私有构造函数。你的HttpFilters类构造函数没有标记@Inject,导致Guice无法自动注入EssentialLoggingFilter实例,直接触发了第一个错误。
2. 多余的命名绑定配置
你添加的bind(EssentialLoggingFilter.class).annotatedWith(Names.named("custom-http-filters"));完全没必要,而且和实际代码逻辑冲突:你的HttpFilters构造函数需要的是不带命名注解的EssentialLoggingFilter实例,但这个绑定只创建了带命名标记的实例,Guice找不到匹配的无注解绑定,因此抛出第二个错误。
修复步骤
步骤1:修改HttpFilters类,添加@Inject注解
更新后的HttpFilters代码:
package filters; import play.http.DefaultHttpFilters; import javax.inject.Inject; public class HttpFilters extends DefaultHttpFilters { @Inject public HttpFilters(EssentialLoggingFilter filter) { super(filter); } }
步骤2:删除多余的绑定配置
直接删除模块中这一行代码:
bind(EssentialLoggingFilter.class).annotatedWith(Names.named("custom-http-filters"));
步骤3:验证application.conf配置
确保play.http.filters = "filters.HttpFilters"配置正确,类路径和包名完全匹配。
完成以上修改后,Guice就能正确识别并注入过滤器依赖,你的请求响应日志功能就能正常工作了。
内容的提问来源于stack exchange,提问作者Alter
相关产品推荐
相关产品推荐

