1) Validation종류
저희 레벨2 플젝에서
@Getter
@Setter
public class SignupRequestDto {
@NotBlank
@Size(min = 4,max = 10)
@Pattern(regexp = "\[a-z0-9\]_$")
private String username;
@NotBlank
@Size(min = 8,max = 15)
@Pattern(regexp = "\[a-zA-Z0-9\`~!@#$%^&_()\_=+|{};:,.<>/?\]\*$")
private String password;
private boolean admin = false;
private String adminToken = "";
}
유저 네임과 비번의 제한을 주었습니다. @Size
면 유저네임의 크기를 말합니다. 이런 식으로 애너테이션을 사용하여 유효성 검사 하는 것을 Java Bean Validation API
라고 합니다. 이 방식 말고도 Apache Commons, Google Guava 등 외부 라이브러리를 사용하여 유효성 검사를 수행할 수도 있습니다.
그럼 Validation의 종류를 나열해 보겠습니다.
@NotNull
: 해당 필드의 값이 null이 아니어야 함을 나타냅니다.@Null
: 해당 필드의 값이 null이어야 함을 나타냅니다.@AssertTrue
: 해당 필드의 값이 true여야 함을 나타냅니다.@AssertFalse
: 해당 필드의 값이 false여야 함을 나타냅니다.@Min(value)
: 숫자 필드가 특정 최소값 이상이어야 함을 나타냅니다.@Max(value)
: 숫자 필드가 특정 최대값 이하이어야 함을 나타냅니다.@DecimalMin(value)
: 숫자 필드가 특정 최소값(소수점 포함) 이상이어야 함을 나타냅니다.@DecimalMax(value)
: 숫자 필드가 특정 최대값(소수점 포함) 이하이어야 함을 나타냅니다.@Size(min, max)
: 문자열, 컬렉션, 맵, 배열의 크기가 특정 범위에 있어야 함을 나타냅니다.@Digits(integer, fraction)
: 숫자 필드가 특정 형식(정수 자릿수, 소수점 자릿수)을 가져야 함을 나타냅니다.@Past
: 날짜와 시간 필드가 과거여야 함을 나타냅니다.@Future
: 날짜와 시간 필드가 미래여야 함을 나타냅니다.@Pattern(regex)
: 문자열 필드가 특정 정규 표현식 패턴을 맞춰야 함을 나타냅니다.@Email
: 문자열 필드가 이메일 형식을 맞춰야 함을 나타냅니다.
이러한 애너테이션 형태로 유효성 검사를 제공합니다.
그럼 blogProj에서 다시 보겠습니다.
@Getter
@Setter
public class SignupRequestDto {
@NotBlank
@Size(min = 4,max = 10) //username의 크기를 4자에서 10자로
@Pattern(regexp = "[a-z0-9]*$") //a-z, 0-9만 사용
private String username;
@NotBlank
@Size(min = 8,max = 15) //최소 8자 이상, 15자 이하
//이며 알파벳 대소문자(a~z, A~Z), 숫자(0~9)
@Pattern(regexp = "[a-zA-Z0-9`~!@#$%^&*()_=+|{};:,.<>/?]*$")
private String password;
private boolean admin = false;
private String adminToken = "";
}
이렇게 설정하였는데 한 번 postman으로 확인해보면
패스워드가 12 두자리죠? 이렇게 post하면
이런 에러가 뜨며
이런 결과를 가져옵니다.
2) Validation 예외 처리
@PostMapping("/user/signup")
public String signup(@Valid SignupRequestDto requestDto) {
userService.signup(requestDto);
return "redirect:/api/user/login-page";
}
예외 처리를 해야겠죠? 여기서
@Valid
는 유효성 검사가 필요한 객체에 붙이는 애너테이션입니다.
@Valid
주석이 붙은 객체는 해당 객체의 필드에 붙은 Bean Validation 주석들에 따른 유효성 검사를 받게 됩니다.
수업 예제에서는 빈값에 대한 예외 처리를 했습니다.
@PostMapping("/user/signup")
public String signup(@Valid SignupRequestDto requestDto, BindingResult bindingResult) {
// Validation 예외처리
List fieldErrors = bindingResult.getFieldErrors();
if(fieldErrors.size() > 0) {
for (FieldError fieldError : bindingResult.getFieldErrors()) {
log.error(fieldError.getField() + " 필드 : " + fieldError.getDefaultMessage());
}
return "redirect:/api/user/signup";
}
userService.signup(requestDto);
return "redirect:/api/user/login-page";
}
여기서 BindingResult
는 Spring Framework에서 제공하는 인터페이스.
BindingResult
바인딩 과정에서 발생한 오류를 추적 제공하는 역할
※ 여기서 바인딩이란?
특정 메서드나 변수, 필드가 어떤 행동과 연결되어 있는 과정. 웹 api에서는 사용장의 입력값과 객체에 연결 되어 있는 것
@Valid
는 requestDto
의 유효성 검사를 수행하도록 지시 합니다.BindingResult
는 유효성 검사의 결과를 담게 됩니다.if(fieldErrors.size() > 0)
는 유효성 검사에서 오류가 발생했는지 확인합니다. 여기서 fieldErrors.size() > 0
는 유효성 검사가 하나라도 오류나면 에러 로깅을 하기 위해서입니다.for (FieldError fieldError : bindingResult.getFieldErrors())
를 통해서 필드 오류를 순회하며 필드의 이름과 메세지 로깅.
1) Validation종류
저희 레벨2 플젝에서
```java
@Getter
@Setter
public class SignupRequestDto {
@NotBlank
@Size(min = 4,max = 10)
@Pattern(regexp = "[a-z0-9]$")
private String username;
@NotBlank
@Size(min = 8,max = 15)
@Pattern(regexp = "[a-zA-Z0-9`~!@#$%^&()_=+|{};:,.<>/?]*$")
private String password;
private boolean admin = false;
private String adminToken = "";
}
```
유저 네임과 비번의 제한을 주었습니다. @Size
면 유저네임의 크기를 말합니다. 이런 식으로 애너테이션을 사용하여 유효성 검사 하는 것을 Java Bean Validation API
라고 합니다. 이 방식 말고도 Apache Commons, Google Guava 등 외부 라이브러리를 사용하여 유효성 검사를 수행할 수도 있습니다.
그럼 Validation의 종류를 나열해 보겠습니다.
@NotNull
: 해당 필드의 값이 null이 아니어야 함을 나타냅니다.@Null
: 해당 필드의 값이 null이어야 함을 나타냅니다.@AssertTrue
: 해당 필드의 값이 true여야 함을 나타냅니다.@AssertFalse
: 해당 필드의 값이 false여야 함을 나타냅니다.@Min(value)
: 숫자 필드가 특정 최소값 이상이어야 함을 나타냅니다.@Max(value)
: 숫자 필드가 특정 최대값 이하이어야 함을 나타냅니다.@DecimalMin(value)
: 숫자 필드가 특정 최소값(소수점 포함) 이상이어야 함을 나타냅니다.@DecimalMax(value)
: 숫자 필드가 특정 최대값(소수점 포함) 이하이어야 함을 나타냅니다.@Size(min, max)
: 문자열, 컬렉션, 맵, 배열의 크기가 특정 범위에 있어야 함을 나타냅니다.@Digits(integer, fraction)
: 숫자 필드가 특정 형식(정수 자릿수, 소수점 자릿수)을 가져야 함을 나타냅니다.@Past
: 날짜와 시간 필드가 과거여야 함을 나타냅니다.@Future
: 날짜와 시간 필드가 미래여야 함을 나타냅니다.@Pattern(regex)
: 문자열 필드가 특정 정규 표현식 패턴을 맞춰야 함을 나타냅니다.@Email
: 문자열 필드가 이메일 형식을 맞춰야 함을 나타냅니다.
이러한 애너테이션 형태로 유효성 검사를 제공합니다.
그럼 blogProj에서 다시 보겠습니다.
```java
@Getter
@Setter
public class SignupRequestDto {
@NotBlank
@Size(min = 4,max = 10) //username의 크기를 4자에서 10자로
@Pattern(regexp = "[a-z0-9]*$") //a-z, 0-9만 사용
private String username;
```
@NotBlank
@Size(min = 8,max = 15) //최소 8자 이상, 15자 이하
//이며 알파벳 대소문자(a~z, A~Z), 숫자(0~9)
@Pattern(regexp = "[a-zA-Z0-9`~!@#$%^&*()_=+|{};:,.<>/?]*$")
private String password;
private boolean admin = false;
private String adminToken = "";
}
이렇게 설정하였는데 한 번 postman으로 확인해보면
패스워드가 12 두자리죠? 이렇게 post하면
이런 에러가 뜨며
이런 결과를 가져옵니다.
2) Validation 예외 처리
@PostMapping("/user/signup")
public String signup(@Valid SignupRequestDto requestDto) {
userService.signup(requestDto);
return "redirect:/api/user/login-page";
}
예외 처리를 해야겠죠? 여기서
@Valid
는 유효성 검사가 필요한 객체에 붙이는 애너테이션입니다.
@Valid
주석이 붙은 객체는 해당 객체의 필드에 붙은 Bean Validation 주석들에 따른 유효성 검사를 받게 됩니다.
수업 예제에서는 빈값에 대한 예외 처리를 했습니다.
```java
@PostMapping("/user/signup")
public String signup(@Valid SignupRequestDto requestDto, BindingResult bindingResult) {
// Validation 예외처리
List fieldErrors = bindingResult.getFieldErrors();
```
if(fieldErrors.size() > 0) {
for (FieldError fieldError : bindingResult.getFieldErrors()) {
log.error(fieldError.getField() + " 필드 : " + fieldError.getDefaultMessage());
}
return "redirect:/api/user/signup";
}
userService.signup(requestDto);
return "redirect:/api/user/login-page";
}
여기서 BindingResult
는 Spring Framework에서 제공하는 인터페이스.
BindingResult
바인딩 과정에서 발생한 오류를 추적 제공하는 역할
※ 여기서 바인딩이란?
특정 메서드나 변수, 필드가 어떤 행동과 연결되어 있는 과정. 웹 api에서는 사용장의 입력값과 객체에 연결 되어 있는 것
@Valid
는 requestDto
의 유효성 검사를 수행하도록 지시 합니다.BindingResult
는 유효성 검사의 결과를 담게 됩니다.if(fieldErrors.size() > 0)
는 유효성 검사에서 오류가 발생했는지 확인합니다. 여기서 fieldErrors.size() > 0
는 유효성 검사가 하나라도 오류나면 에러 로깅을 하기 위해서입니다.for (FieldError fieldError : bindingResult.getFieldErrors())
를 통해서 필드 오류를 순회하며 필드의 이름과 메세지 로깅.
1) Validation종류
저희 레벨2 플젝에서
```java
@Getter
@Setter
public class SignupRequestDto {
@NotBlank
@Size(min = 4,max = 10)
@Pattern(regexp = "[a-z0-9]$")
private String username;
@NotBlank
@Size(min = 8,max = 15)
@Pattern(regexp = "[a-zA-Z0-9`~!@#$%^&()_=+|{};:,.<>/?]*$")
private String password;
private boolean admin = false;
private String adminToken = "";
}
```
유저 네임과 비번의 제한을 주었습니다. @Size
면 유저네임의 크기를 말합니다. 이런 식으로 애너테이션을 사용하여 유효성 검사 하는 것을 Java Bean Validation API
라고 합니다. 이 방식 말고도 Apache Commons, Google Guava 등 외부 라이브러리를 사용하여 유효성 검사를 수행할 수도 있습니다.
그럼 Validation의 종류를 나열해 보겠습니다.
@NotNull
: 해당 필드의 값이 null이 아니어야 함을 나타냅니다.@Null
: 해당 필드의 값이 null이어야 함을 나타냅니다.@AssertTrue
: 해당 필드의 값이 true여야 함을 나타냅니다.@AssertFalse
: 해당 필드의 값이 false여야 함을 나타냅니다.@Min(value)
: 숫자 필드가 특정 최소값 이상이어야 함을 나타냅니다.@Max(value)
: 숫자 필드가 특정 최대값 이하이어야 함을 나타냅니다.@DecimalMin(value)
: 숫자 필드가 특정 최소값(소수점 포함) 이상이어야 함을 나타냅니다.@DecimalMax(value)
: 숫자 필드가 특정 최대값(소수점 포함) 이하이어야 함을 나타냅니다.@Size(min, max)
: 문자열, 컬렉션, 맵, 배열의 크기가 특정 범위에 있어야 함을 나타냅니다.@Digits(integer, fraction)
: 숫자 필드가 특정 형식(정수 자릿수, 소수점 자릿수)을 가져야 함을 나타냅니다.@Past
: 날짜와 시간 필드가 과거여야 함을 나타냅니다.@Future
: 날짜와 시간 필드가 미래여야 함을 나타냅니다.@Pattern(regex)
: 문자열 필드가 특정 정규 표현식 패턴을 맞춰야 함을 나타냅니다.@Email
: 문자열 필드가 이메일 형식을 맞춰야 함을 나타냅니다.
이러한 애너테이션 형태로 유효성 검사를 제공합니다.
그럼 blogProj에서 다시 보겠습니다.
```java
@Getter
@Setter
public class SignupRequestDto {
@NotBlank
@Size(min = 4,max = 10) //username의 크기를 4자에서 10자로
@Pattern(regexp = "[a-z0-9]*$") //a-z, 0-9만 사용
private String username;
```
@NotBlank
@Size(min = 8,max = 15) //최소 8자 이상, 15자 이하
//이며 알파벳 대소문자(a~z, A~Z), 숫자(0~9)
@Pattern(regexp = "[a-zA-Z0-9`~!@#$%^&*()_=+|{};:,.<>/?]*$")
private String password;
private boolean admin = false;
private String adminToken = "";
}
이렇게 설정하였는데 한 번 postman으로 확인해보면
패스워드가 12 두자리죠? 이렇게 post하면
이런 에러가 뜨며
이런 결과를 가져옵니다.
2) Validation 예외 처리
@PostMapping("/user/signup")
public String signup(@Valid SignupRequestDto requestDto) {
userService.signup(requestDto);
return "redirect:/api/user/login-page";
}
예외 처리를 해야겠죠? 여기서
@Valid
는 유효성 검사가 필요한 객체에 붙이는 애너테이션입니다.
@Valid
주석이 붙은 객체는 해당 객체의 필드에 붙은 Bean Validation 주석들에 따른 유효성 검사를 받게 됩니다.
수업 예제에서는 빈값에 대한 예외 처리를 했습니다.
@PostMapping("/user/signup")
public String signup(@Valid SignupRequestDto requestDto, BindingResult bindingResult) {
// Validation 예외처리
List fieldErrors = bindingResult.getFieldErrors();
if(fieldErrors.size() > 0) {
for (FieldError fieldError : bindingResult.getFieldErrors()) {
log.error(fieldError.getField() + " 필드 : " + fieldError.getDefaultMessage());
}
return "redirect:/api/user/signup";
}
userService.signup(requestDto);
return "redirect:/api/user/login-page";
}
여기서 BindingResult
는 Spring Framework에서 제공하는 인터페이스.
BindingResult
바인딩 과정에서 발생한 오류를 추적 제공하는 역할
※ 여기서 바인딩이란?
특정 메서드나 변수, 필드가 어떤 행동과 연결되어 있는 과정. 웹 api에서는 사용장의 입력값과 객체에 연결 되어 있는 것
@Valid
는 requestDto
의 유효성 검사를 수행하도록 지시 합니다.BindingResult
는 유효성 검사의 결과를 담게 됩니다.if(fieldErrors.size() > 0)
는 유효성 검사에서 오류가 발생했는지 확인합니다. 여기서 fieldErrors.size() > 0
는 유효성 검사가 하나라도 오류나면 에러 로깅을 하기 위해서입니다.for (FieldError fieldError : bindingResult.getFieldErrors())
를 통해서 필드 오류를 순회하며 필드의 이름과 메세지 로깅.
'Java' 카테고리의 다른 글
[Java Spring] 지연 로딩(Lazy Loading)과 즉시 로딩(Eager Loading) (0) | 2023.07.09 |
---|---|
[Java] 참조와 접근 (0) | 2023.07.08 |
[Java] 메타 애너테이션 (0) | 2023.07.02 |
[Java Spring] HttpServletResponse (0) | 2023.07.02 |
[Java] split 메서드 (0) | 2023.06.17 |