SpringMVC Validator 검증 예제
1.Validator 인터페이스 기반 인증.
먼저 User 인 스 턴 스 를 만 들 고 몇 가지 속성 을 추가 합 니 다.
public class User {
private String username;
private String password;
private String nickname;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getNickname() {
return nickname;
}
public void setNickname(String nickname) {
this.nickname = nickname;
}
@Override
public String toString() {
return "username--"+username+"password--"+password+"nickname--"+nickname;
}
}
이 어 검사 에 사용 할 클래스 UserValidator 를 만 들 고 Validator 를 실현 하 며 두 가지 방법 을 덮어 씁 니 다.
import main.java.model.User;
import org.springframework.validation.Errors;
import org.springframework.validation.Validator;
public class UserValidator implements Validator {
@Override
public boolean supports(Class<?> aClass) {
// , User
return User.class.equals(aClass);
}
@Override
public void validate(Object o, Errors errors) {
User u = (User) o;
if (null == u.getPassword() || "".equals(u.getPassword())){
// , field,
// , errorCode ,
// ,
// 2,3
errors.rejectValue("password",null,null,"password is null");
}
}
}
위의 클래스 는 암호 에 대한 판단 이 비어 있 는 지,비어 있 으 면 이 오류 정 보 를 등록 합 니 다.즉,'password is null'입 니 다.그 다음 에 컨트롤 러,컨트롤 러 가 해 야 할 일 을 실현 합 니 다.첫 번 째 는 이 검증 기 를 등록 하 는 것 이 고,두 번 째 는 검증 을 실현 하 는 것 입 니 다.
import main.java.model.User;
......
/**
* @Controller
*/
@Controller
@RequestMapping("/user")
public class HelloController {
// Controller @InitBinder Controller
//
@InitBinder
public void initBainder(DataBinder binder){
binder.replaceValidators(new UserValidator());
}
//
@RequestMapping(value = "/login",method = RequestMethod.GET)
public String login(Model model){
model.addAttribute(new User());
return "user/login";
}
//
@RequestMapping(value = "/login",method = RequestMethod.POST)
public String login(@Validated User user, BindingResult br){
if (br.hasErrors()){
return "user/login";
}
return "--";
}
}
위의 코드 는@Validated User user,BindingResult br 라 는 두 개의 매개 변 수 를 볼 수 있 습 니 다.@Validated 는 매개 변수 user 가 검증 할 클래스 임 을 나타 내 고 BindingResult 는 잘못된 정 보 를 저장 하 는 클래스 입 니 다.둘 은 일일이 대응 해 야 하 며 위치 가 붙 어 있어 야 합 니 다.중간 에 다른 매개 변수 가 있어 서 는 안 됩 니 다.마지막 으로 jsp 페이지 를 마음대로 써 서 교정 검 사 를 실현 합 니 다.
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="sf" uri="http://www.springframework.org/tags/form" %>
<%
request.setCharacterEncoding("utf-8");
%>
<html>
<head>
<meta charset="utf-8">
<title> </title>
</head>
<body>
<sf:form modelAttribute="user" method="post">
:<sf:input path="username"/><sf:errors path="username"/>
<br>
:<sf:input path="password"/><sf:errors path="password"/>
<br>
:<sf:input path="nickname"/><sf:errors path="nickname"/>
<br>
<input type="submit" value=" ">
</sf:form>
</body>
</html>
앞에서 실 현 된 것 은 부분 검사 입 니 다.현재 컨트롤 러 에 만 유효 합 니 다.전역 검 사 를 하려 면 springMVC.xml 파일 을 설정 해 야 합 니 다.
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">
<mvc:annotation-driven validator="userValidator"/>
<bean id="userValidator" class="com.xxx.xxx.UserValidator"/>
...
</beans>
2.Annotation JSR-303 표준 검증 사용이 가방 을 사용 하려 면 JSR-303 표준 을 지원 하 는 가방 을 가 져 와 야 합 니 다.hibenate Validator 이 가방 을 사용 하 는 것 을 권장 합 니 다.이 표준 의 원생 표 시 를 먼저 보 세 요.
제한 하 다.
설명 하 다.
@Null
null 로 만 제한
@NotNull
null
@AssertFalse
false 로 제한
@AssertTrue
트 루 로 제한
@DecimalMax(value)
지정 한 값 보다 크 지 않 은 숫자 로 제한 해 야 합 니 다.
@DecimalMin(value)
지정 한 값 보다 작 지 않 은 숫자 로 제한 해 야 합 니 다.
@Digits(integer,fraction)
제한 은 하나의 소수 로 해 야 하 며,정수 부분의 자릿수 는 integer 를 초과 해 서 는 안 되 며,소수 부분의 자릿수 는 fraction 을 초과 해 서 는 안 된다.
@Future
제한 은 반드시 미래의 날짜 여야 한다.
@Max(value)
지정 한 값 보다 크 지 않 은 숫자 로 제한 해 야 합 니 다.
@Min(value)
지정 한 값 보다 작 지 않 은 숫자 로 제한 해 야 합 니 다.
@Past
제한 은 반드시 과거의 날짜 여야 한다.
@Pattern(value)
제한 은 지정 한 정규 표현 식 에 부합 해 야 합 니 다.
@Size(max,min)
문자 길 이 를 제한 하려 면 min 에서 max 사이 에 있어 야 합 니 다.
@Past
주 해 를 검증 하 는 요소 값(날짜 형식)이 현재 시간 보다 빠 릅 니 다.
@NotEmpty
주 해 를 검증 하 는 요소 값 은 null 이 아니 라 비어 있 지 않 습 니 다(문자열 길이 0 이 아 닙 니 다.집합 크기 는 0 이 아 닙 니 다)
@NotBlank
주 해 를 검증 하 는 요소 값 은 비어 있 지 않 습 니 다(null 이 아 닙 니 다.첫 번 째 빈 칸 을 제거 한 후 길 이 는 0 입 니 다).@NotEmpty 와 달리@NotBlank 는 문자열 에 만 적용 되 며 비교 할 때 문자열 의 빈 칸 을 제거 합 니 다.
주 해 를 검증 하 는 요소 값 은 Email 이 며 정규 표현 식 과 flag 를 통 해 사용자 정의 email 형식 을 지정 할 수 있 습 니 다.
간단하게 사용 하려 면 검증 이 필요 한 변수 앞 에 이 Annotation 을 추가 하면 됩 니 다.아래 에 사 용 된 User 를 보십시오.
public class User {
@NotEmpty(message = " ")
private String username;
@Size(min=6 ,max= 20 ,message = " ")
private String password;
private String nickname;
......
}
그리고 컨트롤 러 에 인증 을 넣 으 시 면 됩 니 다.
@Controller
@RequestMapping("/user")
public class HelloController {
@RequestMapping(value = "/login",method = RequestMethod.GET)
public String login(Model model){
model.addAttribute(new User());
return "user/login";
}
@RequestMapping(value = "/login",method = RequestMethod.POST)
public String login(@Validated User user, BindingResult br){
if (br.hasErrors()){
return "user/login";
}
return "user/login";
}
}
그리고 jsp 페이지 는 이전 페이지 입 니 다.검증 효 과 는 다음 과 같 습 니 다.이런 방법 은 훨씬 간단 합 니 다.3.자신의 Annotation Validator 정의
이 부분 은[큰 소][1]에서 직접 복사 해 왔 습 니 다.
JSR-303 원생 이 지원 하 는 제한 유형 외 에 도 우 리 는 자신의 제한 유형 을 정의 할 수 있다.자신의 제한 유형 을 정의 하려 면 먼저 이 제한 유형의 주 해 를 정의 해 야 하 며,이 주 해 는@Constraint 표 시 를 사용 해 야 합 니 다.지금 우리 가 금액 을 표시 하 는 제한 유형 을 정의 해 야 한다 고 가정 하면 우 리 는 이렇게 정의 할 수 있다.
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import javax.validation.Constraint;
import javax.validation.Payload;
import com.xxx.xxx.constraint.impl.MoneyValidator;
@Target({ElementType.FIELD, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy=MoneyValidator.class)
public @interface Money {
String message() default" ";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
위 코드 에서 Money 주 해 를 정의 한 것 을 볼 수 있 습 니 다.또한 이 주 해 는@Constraint 주 해 를 표시 하고@Constraint 주 해 를 사용 하여 제한 에 사용 할 주 해 를 정 의 했 음 을 표시 합 니 다.@Constraint 주해 의 vaidatedBy 속성 은 우리 가 정의 하 는 현재 제한 형식 을 지정 할 때 어떤 ConstraintValidator 에 의 해 검증 되 어야 하 는 지 를 지정 하 는 데 사 용 됩 니 다.위 코드 에서 Money 제한 유형 을 지정 한 검사 류 는 Money Validator 입 니 다.또한 주의해 야 할 것 은 우리 가 자신의 제한 유형의 주 해 를 정의 할 때 세 가지 속성 이 반드시 정의 되 어야 한 다 는 것 이다.예 를 들 어 상기 코드 에 표 시 된 message,groups 와 payload 속성 이다.제한 유형 Money 를 정의 한 다음 에 우리 의 제한 유형 검사 류 Money Validator 를 정의 합 니 다.형식 검사 클래스 를 제한 하려 면 인터페이스 javax.vaidation.constraintValidator 를 실현 하고 initialize 와 isValid 방법 을 실현 해 야 합 니 다.Money Validator 의 코드 예 시 를 살 펴 보 겠 습 니 다.
import java.util.regex.Pattern;
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
import com.xxx.xxx.constraint.Money;
public class MoneyValidator implements ConstraintValidator<Money, Double> {
private String moneyReg = "^\\d+(\\.\\d{1,2})?$";//
private Pattern moneyPattern = Pattern.compile(moneyReg);
public void initialize(Money money) {
// TODO Auto-generated method stub
}
public boolean isValid(Double value, ConstraintValidatorContext arg1) {
// TODO Auto-generated method stub
if (value == null)
return true;
return moneyPattern.matcher(value.toString()).matches();
}
}
위의 코드 에서 우 리 는 Constraint Validator 가 범 형 을 사용 한 것 을 볼 수 있다.이것 은 모두 두 가지 유형 을 지정 해 야 합 니 다.첫 번 째 유형 은 대응 하 는 initialize 방법의 매개 변수 유형 이 고 두 번 째 유형 은 대응 하 는 isValid 방법의 첫 번 째 매개 변수 유형 입 니 다.위의 두 가지 방법 을 통 해 알 수 있 듯 이 isValid 방법 은 검 사 를 하 는 데 사 용 됩 니 다.가끔 은 우리 가 검 사 를 하 는 과정 에서 현재 의 제한 유형의 속성 을 취하 여 검 사 를 해 야 합 니 다.예 를 들 어 우리 가@Min 제한 유형 을 검사 할 때 우 리 는 그 value 속성 을 통 해 현재 검사 유형 정의 의 최소 값 을 가 져 와 야 합 니 다.현재 제한 유형 Money 를 가 져 올 수 없 는 isValid 방법 을 볼 수 있 습 니 다.이 럴 때 initialize 방법의 역할 이 나 옵 니 다.initialize 방법 은 현재 의 제한 유형 을 얻 을 수 있다 는 것 을 알 고 있 습 니 다.따라서 특정한 제한 유형 을 검사 할 때 현재 제한 유형의 특정한 속성 을 가 져 와 야 할 때 현재 ConstraintValidator 에 해당 하 는 속성 을 정의 한 다음 initialize 방법 에서 이 속성 에 값 을 부여 할 수 있 습 니 다.이제 우 리 는 isValid 방법 에서 대응 하 는 속성 을 사용 할 수 있 습 니 다.이러한 상황 에 대해 우 리 는 코드 예 시 를 살 펴 보 겠 습 니 다.지금 은 제 가 자신의@Min 제한 유형 과 대응 하 는 MinValidator 검사 기 를 정의 하려 고 한다 고 가정 하면 다음 과 같이 정의 할 수 있 습 니 다.
@Target({ElementType.FIELD, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy=MinValidator.class)
public @interface Min {
int value() default 0;
String message();
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
MinValidator
public class MinValidator implements ConstraintValidator<Min, Integer> {
private int minValue;
public void initialize(Min min) {
// TODO Auto-generated method stub
// Min value ConstraintValidator minValue
minValue = min.value();
}
public boolean isValid(Integer value, ConstraintValidatorContext arg1) {
// TODO Auto-generated method stub
// ConstraintValidator minValue Min value
return value >= minValue;
}
}
계속해서 ConstraintValidator 범 형의 두 번 째 유형 을 말씀 드 리 겠 습 니 다.두 번 째 유형 은 해당 하 는 isValid 방법의 첫 번 째 매개 변수 라 는 것 을 알 고 있 습 니 다.제 가 드 린 매개 변수 이름 value 를 보면 isValid 방법의 첫 번 째 매개 변 수 는 현재 검증 해 야 할 데이터 의 값 임 을 알 수 있 습 니 다.그 유형 도 바로 우리 가 검증 해 야 할 데이터 형식 에 대응 하 는 것 입 니 다.이 두 가지 데이터 형식 은 일치 해 야 합 니 다.그렇지 않 으 면 spring 은 데이터 형식 에 대응 하 는 ConstraintValidator 를 찾 을 수 없 음 을 알려 줍 니 다.자신의 제한 유형 과 이에 대응 하 는 ConstraintValidator 를 만 든 후 그 용법 은 표준 JSR-303 제한 유형 과 같다.다음은 상기 자신 이 정의 한 JSR-303 제한 유형 인 Money 제한 과 Min 제한 을 사용 한 실체 유형 이다.
public class User {
private int age;
private Double salary;
@Min(value=8, message=" 8 ")
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Money(message=" xxx.xx")
public Double getSalary() {
return salary;
}
public void setSalary(Double salary) {
this.salary = salary;
}
}
4.ajax 인증 에 맞 추기최근 에 쓴 프로젝트 는 vaidator 를 직접 사용 하 는 것 이 좋 지 않 습 니 다.주로 돌아 갈 때 전체 페이지 를 새로 고 쳐 야 오류 정보 가 나 옵 니 다.체험 이 상당히 좋 지 않 습 니 다.검증 은 ajax 로 체험 하 는 것 이 좋 습 니 다.그래서 ajax 와 함께 하 는 것 이 좋 습 니 다.
사고:검증 은 springMVC 를 사용 하여 검증 합 니 다.다만 이번에 오 류 를 발견 하면 오 류 를 꺼 내 map 에 저장 한 다음 ajax 가 돌아 갑 니 다.페이지 는 ajax 반환 값 에 따라 판단 하여 서로 다른 정 보 를 표시 합 니 다.
주 코드:
if (br.hasErrors()){//
// , , map
br.getFieldErrors().forEach(p->{
maps.put(p.getField(),p.getDefaultMessage());
});
return maps;
}
이렇게 되면 maps 에 저 장 된 것 은 오류 변수 이름,오류 정보 입 니 다.예 를 들 어 username-'사용자 이름 이 비어 있 으 면 안 됩 니 다'입 니 다.이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
ssm 프레임워크 업로드 이미지 로컬 및 데이터베이스에 저장 예시본고는 ssm 프레임워크 업로드 이미지를 로컬과 데이터베이스에 저장하는 예시를 소개하고 주로 Spring+SpringMVC+MyBatis 프레임워크를 사용하여 ssm 프레임워크 업로드 이미지의 실례를 실현했다. 구체...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.