Everyday Dev System

중요한 Validation, 예외처리 본문

내배캠 주요 학습/Spring 숙련

중요한 Validation, 예외처리

chaeyoung- 2023. 6. 20. 13:15

회원가입에 Validation 적용하기

2023.06.20 - [내배캠 주요 학습/Spring 심화] - Validation, 회원가입 데이터에 적용하기

 

 

1. build.gradle에 의존성 추가

implementation 'org.springframework.boot:spring-boot-starter-validation'

 

@NotBlank
@Email
@Positive(message = "양수만 가능합니다.")
@Negative(message = "음수만 가능합니다.")
@Size(min=2, max=10)
@Max(10)
@Min(2)
@NotNull null 불가
@NotEmpty null, ""불가
@NotBlank null, "", " " 불가
@Size 문자 길이 측정
@Max 최대값
@Min 최소값
@Positive 양수
@Negative 음수
@Email E-mail 형식
@Pattern 정규 표현식

 

 

2.

Code:

[dto] - ProductRequestDto.java

package com.sparta.springauth.dto;

import jakarta.validation.constraints.*;
import lombok.Getter;

@Getter
public class ProductRequestDto {
    @NotBlank
    private String name;
    @Email
    private String email;
    @Positive(message = "양수만 가능합니다.")
    private int price;
    @Negative(message = "음수만 가능합니다.")
    private int discount;
    @Size(min=2, max=10)
    private String link;
    @Max(10)
    private int max;
    @Min(2)
    private int min;
}

 

[controller] - ProductController.java 맨 아래에 메서드 추가

    @PostMapping("/validation")
    @ResponseBody
    public ProductRequestDto testValid(@RequestBody @Valid ProductRequestDto requestDto) {
        return requestDto;
    }

 

 

 

ProductRequestDto에 필드에 Bean Validation 어노테이션을 기재했다고 적용이 되는것이 아니다.

Controller 메서드의 파라미터에
@Valid ProductRequestDto requestDto
라고 기재해야 적용이 된다.

이는, Validation을 실행시키고자 하는 Dto 타입 앞에 @Valid 기재하여 Spring에게 예외처리를 할 것이라고 고지하는 것이다.

 

Postman 활용

- 여기에는 Cookie가 없으므로 복사해와야 함.

1) send 버튼 아래 Cookies에 들어가서 "localhost"를 입력 후 add domain

2) Add cookie를 해서 value부분에 복사한 값을 붙혀넣기

3) name부분는 Authorization 입력 후 save

 

왼쪽 사진은 오류 , 오른쪽 사진은 정상 작동됨

왼쪽 사진은 오류 , 오른쪽 사진은 정상 작동됨
값을 더블클릭해서 복사

 

요청 데이터에서 notnull로 Validation되어 있는 name에 값을 빼고 보내봤다.

거부당하며 서버에 오류가 떴다.

 

아래와 같이 서버에 오류 메시지가 보인다.

Resolved [org.springframework.web.bind.MethodArgumentNotValidException: Validation failed for argument [0] in public com.sparta.springauth.dto.ProductRequestDto com.sparta.springauth.controller.ProductController.testValid(com.sparta.springauth.dto.ProductRequestDto): [Field error in object 'productRequestDto' on field 'name': rejected value []; codes [NotBlank.productRequestDto.name,NotBlank.name,NotBlank.java.lang.String,NotBlank]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [productRequestDto.name,name]; arguments []; default message [name]]; default message [공백일 수 없습니다]] ]