티스토리 뷰
스프링 부트에서 유효성 검증 사용하기
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
- 로드 밸런서
- Spring
- Sticky Session
- 오블완
- spring boot
- HashSet
- 인스턴스변수
- 정적변수
- fail-safe
- 티스토리챌린지
- object
- fail-fast
- nginx
- Caching
- nosql
- 자동구성
- HashMap
- Hash
- Red-Black Tree
- 추상클래스
- @conditional
- Security
- Load Balancer
- AutoConfiguration
- syncronized
- 고정 세션
- JPA
- 인터페이스
- java
- 다중화
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |