강의

멘토링

커뮤니티

Cộng đồng Hỏi & Đáp của Inflearn

Hình ảnh hồ sơ của jheom7521
jheom7521

câu hỏi đã được viết

Từ ngữ pháp Kotlin đến thực hành (chuyển đổi Java thực tế sang Kotlin)

Thực hành - Chuyển đổi bộ điều khiển

서비스, 컨트롤러 질문입니다.

Viết

·

340

·

Đã chỉnh sửa

0

1. 컨트롤러를 변환후 test실행했는데요.

com.makers.princemaker.exception.PrinceMakerException: 해당되는 왕자님이 안계십니다.

at com.makers.princemaker.controller.PrinceMakerController.getPrinces(PrinceMakerController.kt:31) ~[main/:na]

 

31번째 라인 소스입니다.

@get:GetMapping("/princes")
val princes: List<PrinceDto>
    get() = princeMakerService.allPrince

 

오류메세지를 자세히 보니 수업시간에 말씀하신부분인거 같은데 정확하게 어딘지 못찾겠네요...

 

ERROR 68014 --- [ Test worker] c.m.p.e.PrinceMakerExceptionHandler : url: /create-prince, message: Validation failed for argument [0] in public com.makers.princemaker.dto.CreatePrince$Response com.makers.princemaker.controller.PrinceMakerController.createPrince(com.makers.princemaker.dto.CreatePrince$Request): [Field error in object 'request' on field 'experienceYears': rejected value [null]; codes [NotNull.request.experienceYears,NotNull.experienceYears,NotNull.java.lang.Integer,NotNull]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [request.experienceYears,experienceYears]; arguments []; default message [experienceYears]]; default message [must not be null]]

 

 

 

  1. 컨트롤러 변환이후 서비스에서 WoundedPrinceRepository해당 파라미터가 not-null인데 null로 설정되어있다고 오류메시지가 나와서 서비스 상단 생성자 부분을 아래와 같이 수정했더니 오류가 사라졌는데 맞게 수정한걸까요?

class PrinceMakerService (
    private val princeRepository: PrinceRepository,
    private val woundedPrinceRepository: WoundedPrinceRepository?
) 
javaspringkotlinspring-boot객체지향

Câu trả lời 2

0

jheom님의 프로필 이미지
jheom
Người đặt câu hỏi

제가 serviceTest 소스에

 

@Mock
private WoundedPrinceRepository woundedPrinceRepository;

빠져있어서 정상컴파일 했습니다.

 

추가 궁금한게 잇는데요.

POST http://localhost:8080/create-prince

실행하면 다음과 같이 오류메시지가 나오는데요

{

"errorCode": "DUPLICATED_PRINCE_ID",

"errorMessage": "고유 왕자번호가 중복됩니다."

}

 

그래서 제가 아래처럼 delete를 호출하고 다시 create호출하면 동일한 오류가 나오는데 왜 그런걸까요?

DELETE http://localhost:8080/prince/john1

 

seyol님의 프로필 이미지
seyol
Người chia sẻ kiến thức

안녕하세요. jheom님 🙂

 

http의 DELETE method를 통해 API를 호출하였지만 로직 상 실제로 DB에서 delete를 수행하는 것은 아니고 왕자의 상태를 WOUNDED로 변경하기만 하는 로직이 동작하게 됩니다.

 

따라서 동일한 id로 create를 호출하게 된다면 DUPLICATED 오류가 발생하게 됩니다.

현재 로직의 컨셉 상 정상적인 동작입니다 😀

0

seyol님의 프로필 이미지
seyol
Người chia sẻ kiến thức

안녕하세요 jheom님 😀 질문 감사드립니다~!

 

컨트롤러 변환 과정 중이시군요..!

  1. 요 부분은 아마 제 강의에서 "실습 - controller 변환해보기"의 Controller를 코틀린으로 변환 후 테스트가 깨지는 현상을 말씀주신 것 같습니다.

    1. 어노테이션의 올바른 위치를 알려드리기 위해서 의도적으로 깨지도록 되어 있었습니다.

    2. 해당 강의의 10분 42초 부분을 참고해주세요.

    3. @Valid annotion의 위치를 올바르게 수정해주시면 됩니다.

 

  1. 컨트롤러 변환과 서비스 쪽에서의 코드는 연관이 없기 때문에 해당 오류가 발생하면 안될 것 같습니다..^^;;

    1. 혹시 다른 부분에 의도치않은 수정이 발생한 부분이 없는지 체크해봐주시면 좋을 것 같습니다.

       

    2. WoundedPrinceRepository가 정상적으로 bean으로 등록이 되고 있는지 체크해봐주세요.

    3. 혹은 Invalidate Caches... 를 한번 수행해주시는 식으로 Cache를 날려보시면 효과가 있을 수도 있습니다.

 

답변드린 부분이 맞는지 체크해봐주신 후 이상이 있으면 다시 연락 부탁드립니다~!

감사합니다. 좋은 밤 되세요 :)

Hình ảnh hồ sơ của jheom7521
jheom7521

câu hỏi đã được viết

Đặt câu hỏi