본문 바로가기
Java Web/Spring Boot

[Spring Boot] Validation 관련 : BindingResult 클래스

by 스응 2023. 4. 11.
728x90
728x90

#  관련 포스팅

  - Validation 개념 : https://young0105.tistory.com/194

 


BindingResult 클래스

  - @Valid에 대한 결과 값을 갖는 클래스 

      → 직접 예외에 대한 클래스를 컨트롤할 수 있음 (POST 요청에서 자주 사용됨)

  - 단독으로 매개변수에 들어가면 오류 발생

      → 반드시 유효성 검사 대상인 다른 매개변수 바로 뒤에 지정되어야 함

  - Error에 대한 정보를 담는 DTO 클래스를 따로 만들어서 DTO 형식으로 에러 정보를 보낼 수도 있음

 

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
32
33
34
35
@PostMapping("/user3")
public ResponseEntity<?> user3(@Valid @RequestBody User user,
        BindingResult bindingResult) {
    
    // 에러가 있다면
    if (bindingResult.hasErrors()) {
        // 응답 HTTP 메시지 body에 보낼 문자열
        StringBuilder sb = new StringBuilder();
        
        // 모든 에러를 담은 리스트 (스트림 연산 활용)
        // forEach()는 .stream()을 생략해도 정상 작동함
        bindingResult.getAllErrors().forEach(error -> {
            // 에러가 발생한 필드 확인
            System.out.println(error.getCode());
            
            // 에러 발생 시 메세지 확인
            System.out.println(error.getDefaultMessage());
            
            // 에러가 발생한 객체명 확인
            System.out.println(error.getObjectName());
            
            sb.append("field : " + error.getCode()); // 에러가 발생한 필드
            sb.append("\n");
            sb.append("message : " + error.getDefaultMessage()); // 에러 시 메세지
            sb.append("\n");
        });
        
        return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(sb.toString());
    }
    
    // 에러가 없다면
        return ResponseEntity.ok(user);
    }
    
}
cs
320x100
반응형

댓글