首页 > 代码库 > hibernate的校验框架validation 和 HttpMessageConverter的配置方式

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="http://www.mamicode.com/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="http://www.mamicode.com/false"/>  
        <property name="defaultEncoding" value="http://www.mamicode.com/utf-8"/>  
        <property name="cacheSeconds" value="http://www.mamicode.com/120"/>  
    </bean>

配置好了校验器后,需要将校验器注入到处理器适配器中,

将我们配好的validator注入进去,如下:

<mvc:annotation-driven validator="validator"/>


HttpMessageConverter的配置方式

没有validator配置的时候,因为json一直出现乱码,所以我是这样配置的

<bean id="stringHttpMessageConverter" class="org.springframework.http.converter.StringHttpMessageConverter">    
  <constructor-arg value="http://www.mamicode.com/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="http://www.mamicode.com/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="http://www.mamicode.com/false"/>  
        <property name="defaultEncoding" value="http://www.mamicode.com/utf-8"/>  
        <property name="cacheSeconds" value="http://www.mamicode.com/120"/>  
    </bean>




代码不全,请见谅。因为是一边调试一边写的

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