Spring[Info] - Validation

2021. 7. 2. 14:05Spring/Spring[Info]

반응형

🤔 Validation?

일반적인 애플리케이션에서 데이터 유효성 검사 로직은 다음과 같은 문제를 가지고 있다.

  1. 애플리케이션 전체에 분산되어 있다.
  2. 코드 중복이 심하다.
  3. 비즈니스 로직에 섞여있어 검사 로직 추척이 어렵고 애플리케이션이 복잡해진다.

위 경우를 해결하기 위한 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

Validation 어디까지 해봤니? : NHN Cloud Meetup

반응형