一.對于校驗理解
項目中,通常使用較多是前端的校驗
在服務(wù)端校驗:
- 控制層
conroller
:校驗頁面請求的參數(shù)的合法性。在服務(wù)端控制層conroller
校驗,不區(qū)分客戶端類型(瀏覽器、手機客戶端、遠程調(diào)用)- 業(yè)務(wù)層
service
(使用較多):主要校驗關(guān)鍵業(yè)務(wù)參數(shù),僅限于service
接口中使用的參數(shù)。- 持久層
dao
:一般是不校驗的。
二.springmvc校驗
校驗思路:
頁面提交請求的參數(shù),請求到controller
方法中,使用validation
進行校驗。如果校驗出錯,將錯誤信息展示到頁面。
需要的jar包:
hibernate-validator.jar
jboss-logging.jar
validation-api.jar
1.maven依賴:
<!-- hibernate 校驗 -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>5.2.4.Final</version>
</dependency>
2.在SpringMVC配置文件中添加配置校驗器
<!--validation校驗-->
<bean id="validator"
class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
<!-- hibernate校驗器-->
<property name="providerClass" value="org.hibernate.validator.HibernateValidator" />
<!-- 指定校驗使用的資源文件,在文件中配置校驗錯誤信息,如果不指定則默認(rèn)使用classpath下的ValidationMessages.properties -->
<property name="validationMessageSource" ref="messageSource" />
</bean>
<!-- 校驗錯誤信息配置文件 -->
<bean id="messageSource"
class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
<!-- 資源文件名-->
<property name="basenames">
<list>
<value>CustomValidationMessages</value>
</list>
</property>
<!-- 資源文件編碼格式 -->
<property name="fileEncodings" value="utf-8" />
<!-- 對資源文件內(nèi)容緩存時間,單位秒 -->
<property name="cacheSeconds" value="120" />
</bean>
3.校驗器注入到處理器適配器中
<mvc:annotation-driven validator="validator" conversion-service="conversionService"/>
4.在pojo校驗錯誤信息:
- 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配置校驗錯誤信息:
- CustomValidationMessages.properties
user.name.isNull = 用戶名不能為空
user.password.length.error = 請輸入名稱6-40字符密碼
5.捕獲和顯示校驗錯誤信息
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());
//獲取校驗錯誤信息
if(bindingResult.hasErrors()){
List<ObjectError> allErrors = bindingResult.getAllErrors();
for(ObjectError objectError:allErrors){
//輸出錯誤信息
System.out.println(objectError.getDefaultMessage());
}
return "UserInfo/login";
}
userService.insertUser(user);
return "success";
}
}
三.測試:
注冊測試用例:
用戶名:admin
密碼:12
控制臺打印:
四.補充:分組校驗
定義多個校驗分組(其實是一個java接口),分組中定義有哪些規(guī)則
每個controller方法使用不同的校驗分組
1.校驗分組
public interface ValidGroup1 {
//接口中不需要定義任何方法,僅是對不同的校驗規(guī)則進行分組
//此分組只校驗商品名稱長度
}
2.在校驗規(guī)則中添加分組
//校驗名稱在1到30字符中間
//message是提示校驗出錯顯示的信息
//groups:此校驗屬于哪個分組,groups可以定義多個分組
@Size(min=1,max=30,message="{items.name.length.error}",groups = {ValidGroup1.class})
private String name;
3.在controller方法使用指定分組的校驗
@RequestMapping("insertUser")
public String insertUser (@Validated(value = ValidGroup1.class) User user, BindingResult bindingResult){
.....
}
上一篇文章:SpringMVC框架--注解的處理器映射器和適配器
文集:SpringMVC框架學(xué)習(xí)