hibernate的校驗框架validation 和 HttpMessageConverter的配置方式

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>




代碼不全,請見諒。因爲是一邊調試一邊寫的

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章