最近在搭新項目的開發框架的時候,有些配置中需要使用到enum類,在以前項目的spring-mvc.xml中都是直接字符配置好就OK了,但是在新的項目中,啓動的時候就是拋出org.springframework.beans.ConversionNotSupportedException: Failed to convert property value of type [java.lang.String] to required type [com.kongming.api.interceptor.AnnotationHandlerInterceptor$AnnotationTarget] for property 'annotationTarget'; nested exception is java.lang.IllegalStateException: Cannot convert value of type [java.lang.String] to required type [com.kongming.api.interceptor.AnnotationHandlerInterceptor$AnnotationTarget] for property 'annotationTarget': no matching editors or conversion strategy found
後來我在對比新老項目的配置的時候發現在老項目中有一處是配置了org.springframework.format.support.FormattingConversionServiceFactoryBean.把這個配置加上去之前就正常了.(配置如下)
AnnotationTarget
enum AnnotationTarget {
<span style="white-space:pre"> </span>TYPE_AND_METHOD, TYPE, METHOD
}
AnnotationHandlerInterceptor
public class AnnotationHandlerInterceptor extends HandlerInterceptorAdapter {
private AnnotationTarget annotationTarget;
public void setAnnotationTarget(AnnotationTarget annotationTarget) {
this.annotationTarget = annotationTarget;
}
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler) throws Exception {
//TODO
}
}
spring-mvc.xml
<bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
<property name="formatters">
<set>
<bean class="com.kongming.spring.converter.DecryptionConversionServiceFactoryBean" />
</set>
</property>
</bean>
<mvc:interceptor>
<span style="white-space:pre"> </span><mvc:mapping path="/**" />
<bean class="com.kongming.api.interceptor.AnnotationHandlerInterceptor">
<property name="annotationTarget">
<value>TYPE_AND_METHOD</value>
</property>
</bean>
</mvc:interceptor>
具體什麼原因還沒有去搞清楚,目前也沒有時間去看源碼.以後弄清楚了再發一篇文章吧.如果有了解的同學,歡迎在評論中留言!