SpringMVC框架 -- 注解開(kāi)發(fā)validation校驗(yàn)

一.對(duì)于校驗(yàn)理解

項(xiàng)目中,通常使用較多是前端的校驗(yàn)

在服務(wù)端校驗(yàn):
  • 控制層conroller:校驗(yàn)頁(yè)面請(qǐng)求的參數(shù)的合法性。在服務(wù)端控制層conroller校驗(yàn),不區(qū)分客戶(hù)端類(lèi)型(瀏覽器、手機(jī)客戶(hù)端、遠(yuǎn)程調(diào)用)
  • 業(yè)務(wù)層service(使用較多):主要校驗(yàn)關(guān)鍵業(yè)務(wù)參數(shù),僅限于service接口中使用的參數(shù)。
  • 持久層dao:一般是不校驗(yàn)的。

二.springmvc校驗(yàn)

校驗(yàn)思路:
頁(yè)面提交請(qǐng)求的參數(shù),請(qǐng)求到controller方法中,使用validation進(jìn)行校驗(yàn)。如果校驗(yàn)出錯(cuò),將錯(cuò)誤信息展示到頁(yè)面。
需要的jar包:
hibernate-validator.jar
jboss-logging.jar
validation-api.jar

1.maven依賴(lài):
<!-- hibernate 校驗(yàn) -->
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-validator</artifactId>
    <version>5.2.4.Final</version>
</dependency>
2.在SpringMVC配置文件中添加配置校驗(yàn)器
<!--validation校驗(yàn)-->
    <bean id="validator"
          class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
        <!-- hibernate校驗(yàn)器-->
        <property name="providerClass" value="org.hibernate.validator.HibernateValidator" />
        <!-- 指定校驗(yàn)使用的資源文件,在文件中配置校驗(yàn)錯(cuò)誤信息,如果不指定則默認(rèn)使用classpath下的ValidationMessages.properties -->
        <property name="validationMessageSource" ref="messageSource" />
    </bean>
    <!-- 校驗(yàn)錯(cuò)誤信息配置文件 -->
    <bean id="messageSource"
          class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
        <!-- 資源文件名-->
        <property name="basenames">
            <list>
                <value>CustomValidationMessages</value>
            </list>
        </property>
        <!-- 資源文件編碼格式 -->
        <property name="fileEncodings" value="utf-8" />
        <!-- 對(duì)資源文件內(nèi)容緩存時(shí)間,單位秒 -->
        <property name="cacheSeconds" value="120" />
    </bean>
3.校驗(yàn)器注入到處理器適配器中
<mvc:annotation-driven validator="validator" conversion-service="conversionService"/>
4.在pojo校驗(yàn)錯(cuò)誤信息:
  • user.java
public class User {
    private int id;

    @NotNull(message = "{user.name.isNull}")
    private String userName;
    @Size(min = 6,max = 40,message = "{user.password.length.error}")
    private String passWord;
    省略get&set方法........
}
4.在CustomValidationMessages.properties配置校驗(yàn)錯(cuò)誤信息:
  • CustomValidationMessages.properties
user.name.isNull = 用戶(hù)名不能為空
user.password.length.error = 請(qǐng)輸入名稱(chēng)6-40字符密碼
5.捕獲和顯示校驗(yàn)錯(cuò)誤信息
package com.huan.web.UserInfo;

import com.huan.entity.User;
import com.huan.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.validation.ObjectError;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

import java.util.List;

/**
 * Created by ubuntu on 17-7-10.
 */
@Controller
@RequestMapping("userController")

public class UserController {

    @Autowired
    private UserService userService;

    @RequestMapping("insertUser")
    public String insertUser (@Validated User user, BindingResult bindingResult){
        System.out.println(user.toString());
        //獲取校驗(yàn)錯(cuò)誤信息
        if(bindingResult.hasErrors()){
            List<ObjectError> allErrors = bindingResult.getAllErrors();
            for(ObjectError objectError:allErrors){
                //輸出錯(cuò)誤信息
                System.out.println(objectError.getDefaultMessage());
            }
            return "UserInfo/login";
        }
        userService.insertUser(user);
        return "success";
    }
}


三.測(cè)試:

注冊(cè)測(cè)試用例:
用戶(hù)名:admin
密碼:12

控制臺(tái)打?。?/p>

四.補(bǔ)充:分組校驗(yàn)

定義多個(gè)校驗(yàn)分組(其實(shí)是一個(gè)java接口),分組中定義有哪些規(guī)則
每個(gè)controller方法使用不同的校驗(yàn)分組

1.校驗(yàn)分組

public interface ValidGroup1 {
    //接口中不需要定義任何方法,僅是對(duì)不同的校驗(yàn)規(guī)則進(jìn)行分組
    //此分組只校驗(yàn)商品名稱(chēng)長(zhǎng)度

}

2.在校驗(yàn)規(guī)則中添加分組

//校驗(yàn)名稱(chēng)在1到30字符中間
//message是提示校驗(yàn)出錯(cuò)顯示的信息
//groups:此校驗(yàn)屬于哪個(gè)分組,groups可以定義多個(gè)分組
@Size(min=1,max=30,message="{items.name.length.error}",groups = {ValidGroup1.class})
private String name;

3.在controller方法使用指定分組的校驗(yàn)

    @RequestMapping("insertUser")
    public String insertUser (@Validated(value = ValidGroup1.class) User user, BindingResult bindingResult){
    .....
    }

上一篇文章:SpringMVC框架--注解的處理器映射器和適配器

文集:SpringMVC框架學(xué)習(xí)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,545評(píng)論 19 139
  • 一、準(zhǔn)備 1.1 校驗(yàn)理解 項(xiàng)目中,通常使用較多的是前端的校驗(yàn),比如頁(yè)面中js校驗(yàn)。對(duì)于安全要求較高建議在服務(wù)端進(jìn)...
    yjaal閱讀 4,179評(píng)論 1 4
  • 特殊類(lèi)型的參數(shù)綁定:包裝類(lèi)型的pojo參數(shù)綁定:需求:實(shí)現(xiàn)商品查詢(xún)條件,在商品查詢(xún)的controller中實(shí)現(xiàn)商品...
    MsterKerrigan閱讀 413評(píng)論 0 1
  • 1.Spring web mvc介紹 Spring web mvc和Struts2都屬于表現(xiàn)層的框架,它是Spri...
    七弦桐語(yǔ)閱讀 11,977評(píng)論 2 38
  • 6.7 1.五點(diǎn)二十五起床 2.讀了一會(huì)萬(wàn)歷十五年 3.跑了一千米 4.練了634個(gè)字 5.還是沒(méi)有做俯臥撐,手腕...
    Fhwak閱讀 331評(píng)論 1 1

友情鏈接更多精彩內(nèi)容