• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

@NotNull 관련 질문 드립니다.

23.09.06 08:45 작성 23.09.06 09:01 수정 조회수 374

0

안녕하세요.

먼저, 강의 잘 듣고 있습니다.

 

강의 따라하던 중 아래 이슈가 발생해서 문의 드립니다.

 

Q1.  

@NotNull 지정 시,

Not-null fields must be initialized

라고 경고창이 뜨며..

 

Q2.

테스트를 진행하면 아래와 같이 메세지 부분에

기대했던 값 외에.. 추가 적인 스트링이 들어가서 테스트 성공이 되지 않는 것 같습니다.

Body = {"code":400,"status":"BAD_REQUEST","message":"Field error in object 'productCreateRequest' on field 'type': rejected value [null]; codes [NotNull.productCreateRequest.type,NotNull.type,NotNull.sample.cafekiosk.spring.domain.product.ProductType,NotNull]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [productCreateRequest.type,type]; arguments []; default message [type]]; default message [상품 타입은 필수입니다.]","data":null}

 

스크린샷 2023-09-06 오전 8.43.29.png

 

그 외에 @NotBlank, @Postivie 도 유사한 에러가 발생하고 있습니다.

 

Expected :상품 가격은 양수여야 합니다.

Actual :Field error in object 'productCreateRequest' on field 'price': rejected value [0]; codes [Positive.productCreateRequest.price,Positive.price,Positive.int,Positive]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes ...

 

 

 


 

Q2 의 경우 하여.. 우선은 아래와 같이 문자열을 포함하는지로 수정해서 테스트는 넘어갔습니다.

.andExpect(jsonPath("$.message", "상품 가격은 양수여야 합니다.").exists())

 

Q1 내용은 어떻게 수정하면 된느지 궁금합니다.

 


 

확인 부탁드립니다~

답변 2

·

답변을 작성해보세요.

0

안녕하세요, illhumored님! :)

Q1.

혹시 Spring boot 3버전 대를 사용하고 계신가요?
강의는 2.7.7 버전, 그리고 올려주신 것과 다르게 javax.validation.constraints.NotNull을 사용하고 있습니다. (캡처를 보니 jakarta.validation.constraints.NotNull 을 사용하고 계시네요.)

부트 3버전 대에서는 jakarta 라이브러리를 사용하는 것이 맞긴 한데요.
제가 사용하는 다른 프로젝트에서도 비슷하게 사용하고 있는데, 해당 에러는 발생하지 않고 있습니다.
에러가 뜨는 정확한 원인 파악은 소스를 자세히 올려주셔야 파악이 가능할 것 같습니다.
(만약 컴파일이 불가한 에러가 아니라 단순 경고라면 disable 처리 해주셔도 될 것 같아요.)

Q2.

예외 발생 시 Exception을 어떻게 캡처하여 응답을 구성하는지를 확인해 봐야 할 것 같은데요.
강의 중에 작성했던 ApiControllerAdvice(@RestControllerAdvice)에 디버거를 찍어서 무슨 예외가 발생하는지, 예외가 원하는대로 잘 캡처되는지, 그리고 메시지를 잘 꺼내서 응답을 구성하고 있는지를 한번 확인해보시면 좋을 것 같아요.

다시 시도해보시고 추가적인 도움이 필요하면 말씀 주세요.
감사합니다. :)

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2023.09.08

안녕하세요, 인프런 AI 인턴이에요.
@NotNull 애노테이션은 필드에 null 값을 허용하지 않도록 설정하는 것이 맞아요. 경고창이 뜨는 이유는 해당 필드가 초기화되지 않았을 때 발생하는 경고입니다. 해당 필드에 값을 할당하거나, 생성자 등을 통해 값을 초기화해주면 경고가 사라집니다.

Q2의 경우에는 추가적인 문자열이 포함된 것으로 보입니다. 이는 스프링 프레임워크에서 발생하는 유효성 검사 실패에 대한 상세한 정보입니다. 예를 들어 @NotBlank 애노테이션을 사용한 필드에 빈 문자열이나 공백 문자열이 들어가면 유효성 검사 실패가 발생할 수 있습니다.

이러한 상세한 에러 메시지는 주로 스프링의 Validator와 관련된 내용이므로, 해당 부분을 살펴보시는 것이 좋아요. Validator를 사용하면 더 세부적인 유효성 검사를 할 수 있으며, 원하는 방식으로 에러 메시지를 커스터마이징할 수도 있어요.

다른 애노테이션들도 유사한 에러 메시지가 출력된다고 하셨는데, 이는 유효성 검사를 위한 애노테이션들이 제대로 동작하고 있음을 의미합니다. 예상한 대로 동작하지 않을 때 해당 필드에 대한 설정이나 검증 로직을 다시 확인해보시면 될 것 같아요.

더 도움이 필요하다면 강의에서의 예제 코드와 문제가 된 부분, 그리고 해당 클래스의 코드 일부를 공유해주시면 보다 정확한 답변을 드릴 수 있을 것 같습니다. 수고하세요!