一.對于校驗(yàn)理解
項(xiàng)目中,通常使用較多是前端的校驗(yàn)
在服務(wù)端校驗(yàn):
- 控制層
conroller
:校驗(yàn)頁面請求的參數(shù)的合法性。在服務(wù)端控制層conroller
校驗(yàn),不區(qū)分客戶端類型(瀏覽器、手機(jī)客戶端、遠(yuǎn)程調(diào)用)- 業(yè)務(wù)層
service
(使用較多):主要校驗(yàn)關(guān)鍵業(yè)務(wù)參數(shù),僅限于service
接口中使用的參數(shù)。- 持久層
dao
:一般是不校驗(yàn)的。
二.springmvc校驗(yàn)
校驗(yàn)思路:
頁面提交請求的參數(shù),請求到controller
方法中,使用validation
進(jìn)行校驗(yàn)。如果校驗(yàn)出錯(cuò),將錯(cuò)誤信息展示到頁面。
需要的jar包:
hibernate-validator.jar
jboss-logging.jar
validation-api.jar
1.maven依賴:
<!-- 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" />
<!-- 對資源文件內(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 = 用戶名不能為空
user.password.length.error = 請輸入名稱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";
}
}
三.測試:
注冊測試用例:
用戶名:admin
密碼:12
控制臺打印:
四.補(bǔ)充:分組校驗(yàn)
定義多個(gè)校驗(yàn)分組(其實(shí)是一個(gè)java接口),分組中定義有哪些規(guī)則
每個(gè)controller方法使用不同的校驗(yàn)分組
1.校驗(yàn)分組
public interface ValidGroup1 {
//接口中不需要定義任何方法,僅是對不同的校驗(yàn)規(guī)則進(jìn)行分組
//此分組只校驗(yàn)商品名稱長度
}
2.在校驗(yàn)規(guī)則中添加分組
//校驗(yàn)名稱在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í)