目录
问题描述
Springboot 中读取配置文件
test:
业务代码如下
@Value("${test:true}")
private boolean test;
报错如下
nested exception is org.springframework.beans.TypeMismatchException: Failed to convert value of type 'java.lang.String' to required type 'boolean'; nested exception is java.lang.IllegalArgumentException: Invalid boolean value []
问题分析
根据报错可知,主要问题在于 注入时 test 的值是 String 类型,无法转换成 boolean 类型。
@Value("${test:true}")
private String test;
于是更改了接收类型,看看获取到的值是否是 true,结果发现 test 值为 “”,而不是设置的默认值
解决方案
报错问题在于只要配置文件中有 test:
所以系统就默认 test 为 “” 而不是按照我所设想的为空所以默认值为 true。
直接删除配置文件中的 test:
即可正常启动。
@Value 源码阅读
在排查问题的过程中也粗略的跟读了一下源码
//org.springframework.beans.TypeConverterSupport#doConvert()
private <T> T doConvert(Object value, Class<T> requiredType, MethodParameter methodParam, Field field) throws TypeMismatchException {
try {
return field != null ? this.typeConverterDelegate.convertIfNecessary(value, requiredType, field) : this.typeConverterDelegate.convertIfNecessary(value, requiredType, methodParam);