IT/자바, 스프링

@Valid와 BindingResult로 인풋값 검증이 안됨...

thesse 2023. 5. 16. 16:00
300x250
반응형

예전에 했던건데...

과거 프로젝트에서 무지성으로 복붙했더니 안먹힌다.

result.hasErrors()가 무조건 false로 나옴;;;

 

알고보니 spring boot 3으로 올리면서 디펜던시가 변경되었다.

 

javax.validation 에서 spring-boot-starter-validation 으로 바꿔주니 잘됨

//  implementation group: 'javax.validation', name: 'validation-api', version: '2.0.1.Final'
    implementation 'org.springframework.boot:spring-boot-starter-validation'

 

 

전체 코드

 

Controller

인풋받는 객체 앞에 @Valid 붙여주고, 검증 결과를 저장할 BindingResult 같이 받아주기

    @PostMapping(value = "/signup")
    public ResponseEntity signup(@RequestBody @Valid SignUpRequest request, BindingResult result) {
        if(result.hasErrors()){
            return ResponseEntity.badRequest().body(result.getAllErrors().get(0).getDefaultMessage());
        }
        
        //...
    }

 

Dto

각 멤버 위에 어노테이션으로 검증사항 표시

public class SignUpRequest {

    @NotEmpty(message = "id를 입력하세요")
    private String id;

    @Email
    @NotEmpty(message = "email을 입력하세요")
    private String email;
    
    //...
    
}

 

300x250
반응형