Spring Boot 개발 중 학습이 필요한 내용을 정리하고,
트러블 슈팅 과정을 기록하는 포스팅입니다.
아래 코드는 회원 가입에 관한 기본적인 Application 계층
의 코드와 dto
그리고 test 코드
입니다.
@PostMapping("/api/account")
public AccountSignUpResponse signUp(@RequestBody @Valid final AccountSignUpRequest dto){
Account account = accountService.signUp(dto);
return new AccountSignUpResponse(account);
}
@Getter
@NoArgsConstructor
public class AccountSignUpRequest {
@NotBlank
@Email(message = "이메일을 양식을 지켜주세요.")
private String email;
@NotBlank
private String name;
@NotBlank
private String password;
public AccountSignUpRequest(String email, String name, String password) {
this.email = email;
this.name = name;
this.password = password;
}
public Account toEntity() {
return Account.builder()
.email(email)
.name(name)
.password(Password.builder().password(this.password).build())
.build();
}
}
@Test
public void 회원가입_이메일_유효하지않은_입력값() throws Exception {
//given
String USER_EMAIL = "asdasdwedas";
String USER_NAME = "홍길동";
String USER_PASSWORD = "qwer1234";
AccountSignUpRequest accountSignUpRequest = new AccountSignUpRequest(USER_EMAIL, USER_NAME, USER_PASSWORD);
//when
ResultActions resultActions = mvc.perform(post("/api/account")
.contentType(MediaType.APPLICATION_JSON)
.content(objectMapper.writeValueAsString(accountSignUpRequest))
.accept(MediaType.APPLICATION_JSON))
.andDo(print());
//then
resultActions.andExpect(status().isBadRequest());
}
위의 테스트 코드에서는 email에 적절하지 못한 값이 들어갔기 때문에
@Email 애노테이션
에 의해 BadRequest
를 반환해야 합니다.
하지만 다음과 같이 예외를 반환하지 못하고 정상적으로 처리되는 모습을 확인할 수 있습니다.
코드적인 문제일 것이라고 생각하고 예시 코드를 참고하여 controller
, dto
코드를 이것저것 고쳐보면서 괜한 삽질을 했지만 문제는 그 부분이 아니었습니다,,
implementation 'org.springframework.boot:spring-boot-starter-validation'
해결 방법은 spring-boot-starter-validation 의존성
을 추가하는 것이었습니다.
spring boot 2.3 version 이전에는 spring-boot-starter-web 의존성
내부에 validation 의존성
이 포함돼 있었지만, 2.3 버전 이후로는 포함되지 않는다고 합니다.
때문에 validation 의존성
을 따로 추가해야줘야합니다!!
IDEA에서도 따로 오류 표시가 안뜨고, validation
관련 애노테이션을 불러올 때 제대로 불러오는 것으로 표시돼서 gradle 의존성 관련 문제는 아닐 것이라고 생각했습니다 ㅠㅠ.. 허무하게 시간을 날린 것이 아깝지만,, 시작부터 꼼꼼하지 못했던 탓이기 때문에 하나 배웠다고 생각합니다!
아래는 정상적으로 test 코드
가 처리 된 모습입니다.