인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

fhfkfk789님의 프로필 이미지

작성한 질문수

Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)

Catalogs Microservice - 기능 구현 ②

데이터가 null만 나오는 이유

작성

·

127

0

스크린샷 2025-01-09 오후 6.10.02.png.webpimage.pngimage.png

안녕하세요, 질문 드립니다.

/catalogs 조회하는 api 에서 catalogService.getAllCatalogs();에서 데이터는 디비에서 잘 들고 오는데 ModelMapper만 통과하면 모든 필드가 null로 return 되고 있습니다. 동일한 스팩의 user-service 에서 user 조회 api는 정상적으로 조회가 됩니다... 이유를 모르겠어서 납깁니다..

(created_at 필드는 추가를 하지 않았습니다. 이문제는 아닌 것 같아요)

답변 5

0

Dowon Lee님의 프로필 이미지
Dowon Lee
지식공유자

안녕하세요, 이도원입니다.

아래 kayrr님이 답변 주신 것처럼 Lombok 플러그인으로 처리가 되는지 확인해 보시면 좋을 것 같습니다. Lombok 플러그인의 역할이 Setter/Getter 메소드의 주입이나, 생성자, 기본 Object 메소드들의 재정의 기능 등이 포함되어 있다보니, 결과 값이 null이 포함되어 있다는 것은 Setter가 제대로 작동되지 않은 경우 또는 Setter에 주입하기 위한 필드명에 차이(대소문자 등의 오류)가 있을 수도 있다고 생각됩니다.

감사합니다.

0

kayrr님의 프로필 이미지

저는 pom.xml 파일 annotationProcessorPaths 에 있는 org.projectlombok에 version 명시하는 걸로 해결되었습니다. (제 케이스는 버전 이슈인지는 모르겠으나 롬복이 정상적으로 등록되지 않았던 것 같네요.)

 

<annotationProcessorPaths>
    <path>
       <groupId>org.projectlombok</groupId>
       <artifactId>lombok</artifactId>
       <version>1.18.36</version>
    </path>
</annotationProcessorPaths>
Dowon Lee님의 프로필 이미지
Dowon Lee
지식공유자

안녕하세요, 이도원입니다.

정보 공유 감사합니다.

0

Dowon Lee님의 프로필 이미지
Dowon Lee
지식공유자

안녕하세요, 이도원입니다.

ModelMapper를 사용하는 부분에서 변환이 되지 않은 것 같습니다. CatalogEntity와 ResponseCatalog 간의 속성 이름이 일치 하는지 확인해 봤을 때는 이상이 없어 보입니다. 추가로 @Data annotation을 이용해서 Getter/Setter 메소드를 사용하고 있는 것으로 보이기 때문에, 직접적인 setXxxx/getXxxx를 구현해서 디버깅하는 것도 좋을 것 같습니다. 마지막으로 user-service에서는 동일한 로직으로 사용자 목록을 가져오는 데 문제가 없다고 하셨는데, user-serviser와 catalog-service 가 사용하고 있는 라이브러리등의 버전 확인도 해 보시면 좋을 듯 합니다. ModelMapper를 별도로 구현해서 사용하시려면 아래 코드를 참고하시어 작업해 보시기 바랍니다.

@Bean
public ModelMapper modelMapper() {
    ModelMapper modelMapper = new ModelMapper();
    modelMapper.getConfiguration()
        .setMatchingStrategy(MatchingStrategies.STRICT)
        .setFieldMatchingEnabled(true)
        .setSkipNullEnabled(true)
        .setFieldAccessLevel(Configuration.AccessLevel.PRIVATE);
    return modelMapper;
}

감사합니다.

0

fhfkfk789님의 프로필 이미지
fhfkfk789
질문자

image.png

두 사이에서 불일치는 없어 보입니다 ㅜㅜ

0

인프런 AI 인턴님의 프로필 이미지

안녕하세요, 인프런 AI 인턴입니다.

의도하신 API에서 데이터가 정상적으로 디비에서 가져오는 것부터 확인했지만, ModelMapper를 통해 변환할 때 이슈가 발생하여 모든 필드가 null로 반환되는 것 같습니다. 이와 같은 문제는 주로 다음과 같은 원인에서 발생할 수 있습니다:

  1. ModelMapper 설정: ModelMapper의 매핑 설정 문제로 인해 Entity를 DTO로 매핑하는 과정에서 필드가 매핑되지 않을 가능성이 있습니다. 매핑 설정을 통해 명시적으로 어떤 필드를 어떤 필드로 매핑할지 지정하는 방법을 고려해보세요. 예를 들어, ModelMapper에서 strict 매핑 전략을 사용해 잘 매핑되는지 확인할 수 있습니다.

  2. DTO와 Entity의 필드 불일치: CatalogEntityResponseCatalog 간의 필드명이 정확히 일치하는지 확인해 보세요. 필드명이 다르거나, 맞출 수 없는 필드가 있으면, 매핑이 정상적으로 이루어지지 않을 수 있습니다.

  3. 데이터 유형 불일치: 데이터 유형이 불일치하면 ModelMapper에서 매핑에 실패할 수 있습니다. 필드의 데이터 유형이 정확히 일치하는지 확인해 보세요.

관련된 질문들이 있을지 모르니, Spring Boot와 ModelMapper를 이용한 Entity와 DTO 간의 매핑 에러 처리를 참고하여 유사한 문제가 발생할 경우 해결 방법을 확인하실 수 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.