@ModelAttribute触发WARN日志(ParameterTypeReader类)的解决咨询
修复@ModelAttribute触发的Springfox警告
这个警告是Springfox处理请求参数时的顺序问题导致的——它预期@ModelAttribute注解的参数已经被ExpandedParameterBuilderPlugin解析展开,但实际执行顺序里该插件没先处理,所以抛出了警告。以下是几种可行的修复方案:
方案1:调整Springfox参数插件的执行顺序
自定义Springfox配置类,强制让ExpandedParameterBuilderPlugin在ParameterTypeReader之前执行:
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import springfox.documentation.spring.web.readers.parameter.ExpandedParameterBuilderPlugin; import springfox.documentation.spring.web.readers.parameter.ParameterTypeReader; import springfox.documentation.spi.service.ParameterBuilderPlugin; import springfox.documentation.spi.service.contexts.ParameterContext; @Configuration public class SpringfoxConfig { @Bean public ParameterBuilderPlugin expandedParameterBuilderPlugin() { return new ExpandedParameterBuilderPlugin() { @Override public void apply(ParameterContext context) { super.apply(context); } @Override public boolean supports(org.springframework.web.bind.annotation.RequestMethod method) { return true; } }; } @Bean public ParameterBuilderPlugin parameterTypeReader() { return new ParameterTypeReader() { @Override public void apply(ParameterContext context) { // 先判断参数是否已被ExpandedParameterBuilderPlugin处理 if (!context.getRequestParameter().isPresent()) { super.apply(context); } } @Override public boolean supports(org.springframework.web.bind.annotation.RequestMethod method) { return true; } }; } }
方案2:升级Springfox版本
部分旧版本Springfox存在插件顺序的bug,尝试升级到3.0.0及以上的稳定版本,官方通常已修复这类问题。
方案3:替换参数注解(业务允许的话)
如果你的参数仅用于接收请求参数,不需要@ModelAttribute的模型绑定、数据预处理等特殊功能,可以直接去掉该注解,改用POJO类直接接收(Spring会自动完成参数绑定),或者用@RequestParam注解,这样也能避开这个警告。
方案4:屏蔽该警告日志
如果上述方案都不适用,可在日志配置(如logback.xml)中屏蔽这个警告:
<logger name="springfox.documentation.spring.web.readers.parameter.ParameterTypeReader" level="ERROR"/>
内容的提问来源于stack exchange,提问作者CodeSun
相关产品推荐
相关产品推荐

