일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- Servlet cookie
- 자바 List
- 오라클 CREATE
- Spring MVC5 기본 세팅
- annotation
- Spring 객체로 주입받기
- 오라클 TRUNCATE
- JSR - 380
- JSR - 303
- properties 파일 주입
- Spring
- DDL DROP
- Mybatis 오류
- 자바오류
- Spring 커맨드 객체
- Spring MVC Interceptor
- 코드로 배우는 스프링 웹 프로젝트
- Spring Cookie
- Dependency Injection
- 자바스크립트
- Spring message
- 자바
- collection framework
- properties 변수
- 스프링 인터셉터
- 오라클 DROP
- ddl alter
- 스프링 파라미터 추출
- DDL TRUNCATE
- properties 파일
- Today
- Total
개발이좋아
[Spring] JSR - 303, JSR- 380 유효성 검사 Annotation 본문
JSR - 303 또는 JSR- 380 Annotation은 Bean 객체에 값이 주입될 때 그 값이 정당한 값인가에 대한 여부를 검사하는 유효성 검사 어노테이션이다.
이런 유효성 검사를 하는 어노테이션은 1.0 스펙인 JSR - 303과 2.0 스펙인 JSR - 380으로 나뉘게 된다.
웹 프로젝트 시 사용자가 입력한 값의 유효성 체크 등에 쓰이며, Spring MVC에서는 요청명에 매핑된 메서드의 매개변수인 커스텀 객체에 유효성을 검사할 때 사용된다.
JSR - 303 Reference
▪https://beanvalidation.org/1.0/spec/
JSR - 380 Reference
▪https://beanvalidation.org/2.0/spec/
JSR - 303 어노테이션
- @AssertTrue : Bean 객체에 주입되는 값이 true가 아닌 경우 오류 발생
// data1의 값이 true가 아니면 오류 발생
@AssertTrue
private boolean data1;
public boolean isData1() {
return data1;
}
public void setData1(boolean data1) {
this.data1 = data1;
}
- @AssertFalse : Bean 객체에 주입되는 값이 false가 아닌 경우 오류 발생
// data2의 값이 false가 아니면 오류 발생
@AssertFalse
private boolean data2;
public boolean isData2() {
return data2;
}
public void setData2(boolean data2) {
this.data2 = data2;
}
- @Max(값) : 값보다 큰 값이 들어오면 오류 발생
- @Min(값) : 값보다 작은 값이 들어오면 오류 발생
// data3의 값이 10 미만이거나 100 초과인 경우 오류 발생
@Max(100)
@Min(10)
private String data3;
public String getData3() {
return data3;
}
public void setData3(String data3) {
this.data3 = data3;
}
- @DecimalMax(value = 값, inclusive = true/false) : @Max와 같으나 inclusive가 false면 값이 같거나 큰 값이 들어온 경우 오류 발생, 즉 값이 100인 경우 100보다 작은 값이 들어와야 함 (생략 시 true)
- @DecimalMin(value = 값, inclusive = true/false) : @Min과 같으나 inclusive가 false면 값이 같거나 값보다 작은 값이 들어온 경우 오류 발생, 즉 값이 10이면 10보다 큰 값이 들어와야 함(생략시 true)
// @Min, @Max와 같으나 inclusive가 false라면 값이 같거나 미만 혹은 초과하는 값이 들어온 경우 오류 발생
@DecimalMax(value = "100", inclusive = false)
@DecimalMin(value = "10", inclusive = false)
private String data4;
public String getData4() {
return data4;
}
public void setData4(String data4) {
this.data4 = data4;
}
- @Null : 값이 Null이 아니라면 오류 발생
// data5의 값이 Null이 아니라면 오류 발생
@Null
private String data5;
public String getData5() {
return data5;
}
public void setData5(String data5) {
this.data5 = data5;
}
- @NotNull : 값이 Null인 경우 오류 발생
// data6의 값이 Null인 경우 오류 발생
@NotNull
private String data6;
public String getData6() {
return data6;
}
public void setData6(String data6) {
this.data6 = data6;
}
- @Digits(integer = 정수 자릿수, fraction = 실수 자릿수) : 지정된 자릿수를 초과한 경우 오류 발생
// data7에 정수 3자리 혹은 실수 3자리 이상의 값이 들어오면 오류 발생
@Digits(integer = 3, fraction = 3)
private String data7;
public String getData7() {
return data7;
}
public void setData7(String data7) {
this.data7 = data7;
}
- @Size(max = 최대 값, min = 최소 값) : Bean의 값의 길이가 최소 값 미만이거나 최대 값 초과인 경우 오류 발생
// data8의 값의 길이가 2 자리 미만이거나 10 자리 초과인 경우 오류 발생
@Size(max = 10, min = 2)
private String data8;
public String getData8() {
return data8;
}
public void setData8(String data8) {
this.data8 = data8;
}
- @Pattern(regexp = 정규식) : Bean의 값이 정규식을 위반하는 경우 오류 발생
// data9의 값이 소문자 a ~ z, 대문자 A ~ Z가 아닌 값이 들어오는 경우 오류 발생
@Pattern(regexp = "[a-zA-Z]*" )
private String data9;
public String getData9() {
return data9;
}
public void setData9(String data9) {
this.data9 = data9;
}
JSR - 303은 위와 같은 어노테이션들이 주로 쓰인다.
JSR - 380 어노테이션
- @NotEmpty : 주입된 값의 길이가 0이면 오류 발생 (공백도 글자로 인정)
// data1의 값의 길이가 0이면 오류 발생 (공백도 문자로 취급)
@NotEmpty
private String data1;
public String getData1() {
return data1;
}
public void setData1(String data1) {
this.data1 = data1;
}
- NotBlank : 주입된 값의 길이가 0이면 오류 발생 (공백은 문자취급 X)
// data2의 길이가 0인 경우 오류 발생 (공백은 문자취급X)
@NotBlank
private String data2;
public String getData2() {
return data2;
}
public void setData2(String data2) {
this.data2 = data2;
}
- @Positive : 주입된 값이 양수가 아닌 경우 오류 발생 (자료형 int형이여야함)
// data3의 값이 양수 아닌 경우 오류 발생
@Positive
private int data3;
public int getData3() {
return data3;
}
public void setData3(int data3) {
this.data3 = data3;
}
- @PositiveOrZero : 주입된 값이 0 또는 양수가 아닌 경우 오류 발생 (자료형이 int형이 여야함)
// data4의 값이 0 또는 양수가 아닌 경우 오류 발생
@PositiveOrZero
private int data4;
public int getData4() {
return data4;
}
public void setData4(int data4) {
this.data4 = data4;
}
- @Negative : 주입된 값이 음수가 아닌 경우 오류 발생 (자료형 int형이 여야함)
// data5의 값이 음수가 아닌 경우
@Negative
private int data5;
public int getData5() {
return data5;
}
public void setData5(int data5) {
this.data5 = data5;
}
- @NegativeOrZero : 주입된 값이 0 또는 음수가 아닌 경우 오류 발생 (자료형이 int형이 여야함)
// data6의 값이 0 또는 음수가 아닌 경우 오류 발생
@NegativeOrZero
private int data6;
public int getData6() {
return data6;
}
public void setData6(int data6) {
this.data6 = data6;
}
- @Email : 주입된 값이 Email형식이 아닌 경우 오류 발생
// data7의 값이 Email 형식 (@)이 아닌 경우 오류 발생
@Email
private String data7;
public String getData7() {
return data7;
}
public void setData7(String data7) {
this.data7 = data7;
}
JSR - 380은 위와 같은 어노테이션들이 주로 쓰인다
Controller 클래스에서 유효성 검사 추가
클라이언트에 요청명에 매핑된 메서드의 매개변수에 @Valid 어노테이션을 주입 받음으로써 유효성 검사를 할 수 있다. 이때 매개변수에는 BindingResult 클래스도 같이 주입받으며 BindingResult 객체에 오류의 대한 정보가 들어오게 된다.
@Controller
public class TestController {
@PostMapping("/input_pro")
public String input_pro(@Valid DataBean1 dataBean1, BindingResult result) {
if(result.hasErrors()) {
return "input_data";
}
return "input_success";
}
}
위의 코드는 input_pro 메서드의 커맨드 객체인 DataBean1의 프로퍼티에 자동으로 주입되는 값들이 프로퍼티에 설정한 JSR -303 혹은 JSR - 380 어노테이션에 위배되는 값이 들어와 오류가 발생한 경우 input_data.jsp를 요청하고 정당한 값이 들어와 오류가 없는 경우에는 input_success.jsp를 요청하는 코드이다.
오류의 여부는 BindingResult객체의 hasErrors( ) 메서드를 통하여 확인할 수 있다.
본 포스팅은 필자가 공부한 내용을 정리한 포스팅으로 오류가 존재할 수 있습니다.
참고 : 인프런 - 만들면서 배우는 Spring MVC5
'Web개발 > Spring' 카테고리의 다른 글
[Spring MVC] Spring MVC에서 쿠키(Cookie) 사용하기 (0) | 2020.04.06 |
---|---|
[Spring] properties 파일 내용을 변수에 주입하기 (@PropertySource, @PropertySources, @Value) (0) | 2020.04.02 |
[Spring MVC] Interceptor (Java 설정, Xml 설정) (0) | 2020.03.31 |
[Spring] Command 객체란? (객체를 이용하여 자동으로 파리미터 주입하기) (0) | 2020.03.21 |
[Spring] 요청 파라미터 추출하기 (0) | 2020.03.20 |