티스토리 뷰

스프링 부트에서 유효성 검증 사용하기
spring boot 2.3 이상부터는 dependency 를 추가해주어야 한다.
spring-boot-starter-validation 은 다음과 같이 정의되어 있다.

Starter for using Java Bean Validation with Hibernate Validator


Java Bean Validation? Hibernate Validator? 무엇인지 알아보자.


Bean Validation

Java Bean 유효성 검증을 하기 위한 메타데이터 모델 및 API를 정의한 것이다. - 위키백과
표준 프레임워크이다.
* 명세 확인하기
* JSR380은 Jakarta EE 그리고 JavaSE 의 일부인 빈 유효성 검사를 위한 Java API이다.

Hibernate Validator

표준 프레임워크인 Bean Validation의 구현체로 Bean Validation이 실제 동작하도록 한다.
.
.
그럼 스프링에서 유효성 검사를 진행해보자!
나의 예제는 클라이언트로부터 받은 값(객체)을 검증하는 것이다.

@Controller
public class UserController {

    @PostMapping("/create")
    public ResponseEntity<String> save(@RequestBody @Valid User user) {

        //do somthing

        return ResponseEntity.ok().body("dto 검증 성공");
    }
}

해당 API 는 User 타입 객체를 받고 있는데, @Valid 가 작성된 걸 볼 수 있다.
스프링 부트는 @Valid 가 붙은 request 객체에 대한 검증을 수행한다.
객체 검증을 하려면 객체 어딘가 제약조건이 걸려있을 것 같은데 🧐 아래 코드를 살펴보자.

@Getter
public class User {

    @NotNull
    private String name;
}

name 필드에 @NotNull 이 작성 된 걸 볼 수 있다.
@NotNull 은 말 그대로 해당 필드의 값은 Null 이 될 수 없다(필드는 무조건 리퀘스트에 담아라!) 라는 의미이다.
그럼 테스트를 진행해보자.

@SpringBootTest
@AutoConfigureMockMvc
public class UserControllerIntegrationTest {

    @Autowired private MockMvc mockMvc;

    @Autowired private ObjectMapper objectMapper;

    @Test
    @DisplayName("name 필드 없이 요청하기")
    void isValidObject() throws Exception {

        User user = new User();

        String userDtoToString = null;
        try {
            userDtoToString = objectMapper.writeValueAsString(user);
        } catch (JsonProcessingException e) {
            throw new RuntimeException(e);
        }

        mockMvc.perform(MockMvcRequestBuilders.post("/create")
                .contentType(MediaType.APPLICATION_JSON)
                .content(userDtoToString))
                .andExpect(MockMvcResultMatchers.status().isBadRequest());
    }
}

해당 테스트 코드의 내용은 아래와 같다.
user 객체의 name 필드 값을 넣어주지 않았을 때, 즉 name is null 로 Bad Request (404) 에러가 나오면 성공하는 케이스이다.
왜냐하면 위에서 User.name 은 @NotNull 로 선언되어 있기 때문에 . .

테스트는 성공적이다.
.
.
.
마지막으로 spring boot 에서 validation 어노테이션을 더 많이 지원하니 필요할 때 마다 찾아 보는 것이 좋겠고,
에러 핸들링도 본인에 맞게 하면 될 것 같다. (참고 자료에 에러핸들링 방법도 알려준다)
참고
https://www.baeldung.com/spring-boot-bean-validation

'Framework > Spring' 카테고리의 다른 글

[JPA] 패러다임 불일치  (0) 2022.10.24
[Spring] HTTP 통신 도구  (0) 2022.10.19
[Spring] Component Scan  (0) 2022.08.24
[Spring] Singleton Container  (0) 2022.08.22
[Spring] Container  (0) 2022.08.17
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
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
글 보관함