今天在做springMVC项目,在使用@Value注解时报了一个错。

Caused by: org.springframework.beans.TypeMismatchException: Failed to convert value of type 'java.lang.String' to required type 'java.lang.Integer'; nested exception is java.lang.NumberFormatException: For input string: "${upload.timeout:50000}"

我的代码如下:

public class UploadController extends BaseController {

	private static final Logger LOG = LoggerFactory.getLogger(UploadController.class);

	@Value("${upload.timeout:50000}")
	private Integer timeout;

这里明显给了默认值50000,理论上不应该出现NumberFormatException。后来在网上找了下原因:


不要重复定义<context:component-scan base-package="com.demo" />扫描,否则会导致意外错误。


排查了下代码,原来在spring.xml定义了基础扫描,例如base-package="com.demo" ,然后又在spring-mvc.xml里面定义了例如base-package="com.demo.controller"这导致了controller包被重复扫描。干掉base-package="com.demo.controller"这个配置。但是我的问题并不是包重复扫描。

我的解决方案如下:

在配置springMVC的xml中,例如spring-mvc.xml,增加参数:<context:property-placeholder/>即可解决上述报错问题。