hibernate的校驗框架validation 和 HttpMessageConverter的配置方式
好像是2個不相干的配置內容,但他們都用到了<mvc:annotation-driven />
結果在配置的時候一直無法糅合在一起。
解決方案:
hibernate的校驗框架validator的驗證
主要說的是使用Annotaion JSR標準的驗證,
public class User { @NotEmpty(message = "用戶名不能爲空") private String username; @Size(min=6 ,max= 20 ,message = "密碼長度不符合標準") private String password; private String nickname; ...... }
需要在Spring的配置文件中配置校驗器
<bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"> <property name="providerClass" value="org.hibernate.validator.HibernateValidator"/> <!--不設置則默認爲classpath下的 ValidationMessages.properties --> <property name="validationMessageSource" ref="messageSource"/> </bean> <bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource"> <property name="basenames"> <list> <!-- 在web環境中一定要定位到classpath 否則默認到當前web應用下找 --> <value>classpath:validatemessages</value> </list> </property> <property name="useCodeAsDefaultMessage" value="false"/> <property name="defaultEncoding" value="utf-8"/> <property name="cacheSeconds" value="120"/> </bean>
配置好了校驗器後,需要將校驗器注入到處理器適配器中,
將我們配好的validator注入進去,如下:
<mvc:annotation-driven validator="validator"/>
HttpMessageConverter的配置方式
沒有validator配置的時候,因爲json一直出現亂碼,所以我是這樣配置的
<bean id="stringHttpMessageConverter" class="org.springframework.http.converter.StringHttpMessageConverter"> <constructor-arg value="UTF-8" index="0"/> <property name="supportedMediaTypes"> <list> <value>text/plain;charset=UTF-8</value> </list> </property> </bean> <bean id="jackson2HttpMessageConverter" class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"> <property name="supportedMediaTypes"> <list> <value>text/html;charset=UTF-8</value> <value>text/plain;charset=UTF-8</value> <value>application/json;charset=UTF-8</value> </list> </property> </bean> <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"> <property name="messageConverters"> <list> <ref bean="stringHttpMessageConverter"/> <ref bean="jackson2HttpMessageConverter"/> </list> </property> </bean> <mvc:annotation-driven />
配置必須在 <mvc:annotation-driven /> 之前,否則將不會啓效
兩部分配置都要<mvc:annotation-driven />
而且好像還對位置敏感,簡單的連起來有一個配置會不生效。
最後終於用下面的寫法融合起來了
<mvc:annotation-driven validator="validator"> <mvc:message-converters register-defaults="true"> <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"> <property name="supportedMediaTypes"> <list> <value>text/html;charset=UTF-8</value> <value>text/plain;charset=UTF-8</value> <value>application/json;charset=UTF-8</value> </list> </property> </bean> </mvc:message-converters> </mvc:annotation-driven> <bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"> <property name="providerClass" value="org.hibernate.validator.HibernateValidator"/> <!--不設置則默認爲classpath下的 ValidationMessages.properties --> <property name="validationMessageSource" ref="messageSource"/> </bean> <bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource"> <property name="basenames"> <list> <!-- 在web環境中一定要定位到classpath 否則默認到當前web應用下找 --> <value>classpath:validatemessages</value> </list> </property> <property name="useCodeAsDefaultMessage" value="false"/> <property name="defaultEncoding" value="utf-8"/> <property name="cacheSeconds" value="120"/> </bean>
代碼不全,請見諒。因爲是一邊調試一邊寫的