TIL

효준·2024년 11월 29일
0

11월 29일 수요일
AM 알고리즘 풀이
PM 과제 수행

💡 Today Issue

valid와 validated의 차이

🤔 나의 생각 + 배운 것

@Valid

Valid는 주로 requestbody 검증 시에 사용된다.
@NotNull, @NotBlank, @email 등 여러가지 유효성을 검사할 수 있는 어노테이션이 존재한다.

RequestDto

public class UserRequest {
    @Email
    private String email;

    @NotBlank
    private String password;
    
    @NotNull
    private Address address;

   // 생성자 및 getter 함수
}

Controller

@PostMapping()
public String signUp(@Valid @RequestBody UserRequest request) {
    return "ok";
}

이와 같이 @RequestBody 앞에 @Valid를 선언해줘야 작동한다.


@Validated

Controller

@RestController
@RequestMapping("/users")
@Validated
public class UserController {
    .
    .
    
    @GetMapping("/{id}")
    public String find(@PathVariable @Min(1)  Long id) {
        return "ok";
    }
}

validated는 Controller 클래스 레벨에서 적용하고 API 안에서 위와 같이 적용하면 된다.
여기도 마찬가지로 @Validated를 선언하지 않으면 유효성 검사가 작동하지 않는다.

예외 처리

Valid로 유효성 검사를 할 시 MethodArgumentNotValidException 예외를 발생시키고 Exception Handler로 핸들링 할 수 있다.

@ExceptionHandler(MethodArgumentNotValidException.class)
public ResponseMessage<String> handleMethodArgumentNotValidException(MethodArgumentNotValidException e) {
    return ResponseMessage.badRequest("");
}

Validated로 유효성 검사를 했다면 ConstraintViolationException 예외가 발생하고 아래와 같이 처리할 수 있다.

@ExceptionHandler(ConstraintViolationException.class)
public ResponseMessage<String> handleMethodConstraintViolationException(ConstraintViolationException e) {
    return ResponseMessage.badRequest("");
}

REFERENCE

🕐회고

과제가 끝났고 오랜만에 도전 과제 중 하나를 완성하여 제출했다. 다음에는 더 많이 해볼 수 있도록 노력해야겠다.

profile
사진은 캣타워가 생겨 포효하는 고양이입니다.

0개의 댓글

관련 채용 정보