Spring[Info] - Validation
2021. 7. 2. 14:05ㆍSpring/Spring[Info]
반응형
🤔 Validation?
일반적인 애플리케이션에서 데이터 유효성 검사 로직은 다음과 같은 문제를 가지고 있다.
- 애플리케이션 전체에 분산되어 있다.
- 코드 중복이 심하다.
- 비즈니스 로직에 섞여있어 검사 로직 추척이 어렵고 애플리케이션이 복잡해진다.
위 경우를 해결하기 위한 Bean Validation 이라는 데이터 유효성 검사 프레임워크를 제공하고 있다.
Validation Anntation
Validation 사용법
dependencies {
implementation group: 'org.springframework.boot', name: 'spring-boot-starter-validation', version: '2.5.1'
}
build.gradle 추가
@Data
public class InputRequest {
// 1~10 사이의 값
@Min(1)
@Max(10)
private int numberBetweenOneAndTen;
// 빈 문자열이 아니여야함
@NotEmpty
private String notEmptyString;
// 6자리의 숫자를 가저야함
@Pattern(regexp = "^[0-9]{6}$")
private String pinCode;
}
@RestController
public class ValidateRequestBodyController {
@PostMapping("/validateBody")
ResponseEntity<String> validateBody(@Valid @RequestBody InputRequest request) {
return ResponseEntity.ok("valid");
}
}
@WebMvcTest(controllers = ValidateRequestBodyController.class)
class ValidateRequestBodyControllerTest {
@Autowired
private MockMvc mvc;
@Autowired
private ObjectMapper objectMapper;
@Test
void whenInputRequestIsInvalid_thenReturnStatus400() throws Exception {
final InputRequest request = new InputRequest();
request.setNumberBetweenOneAndTen(1);
request.setNotEmptyString("asd");
request.setPinCode("123456");
final String body = objectMapper.writeValueAsString(request);
mvc.perform(post("/validateBody").contentType("application/json").content(body))
.andExpect(status().isBadRequest());
}
}
Reference
반응형