Java/오류노트

[Java/오류노트] Solved - org.springframework.http.converter.HttpMessageConversionException

adjh54 2024. 6. 3. 20:00
728x170
해당 글에서는 Java 내에서 발생하는 오류에 대한 해결 방법에 대해 알아봅니다.

1) 문제점


💡 문제점

- API 통신을 수행 시 아래와 같은 메시지와 함께 DateInfoDto라는 곳에서 문제가 발생하였습니다.
- 이는 SQL문이 수행되고 Java 객체와 매핑되는 과정에서 해당 SQL 컬럼 데이터와 Java 객체 간의 매핑이 되지 않아 발생하는 문제였습니다.

💡 오류 메시지

- org.springframework.http.converter.HttpMessageConversionException

 

 

1. 문제 지점 확인


💡 문제 지점 확인 : XXXMapper.xml

- 아래와 같이 Mybatis 내의 SQL문 자체에서는 문제가 없이 쿼리가 수행됨을 확인하였습니다.

 

 💡 문제 지점 확인 : DTO

- DTO 내에서는 Lombok을 이용하여서 DTO를 구성하였습니다. 해당 부분 역시 문제가 되는 부분이 없었습니다.
package com.adjh.springboot3tierform.model.dto;

import lombok.*;

import java.sql.Date;
import java.sql.Time;
import java.sql.Timestamp;
import java.time.Year;

/**
 * Please explain the class!!
 *
 * @author : lee
 * @fileName : DateInfoDto
 * @since : 24. 6. 3.
 */
@Getter
@ToString
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class DateInfoDto {
    // 날짜 시퀀스
    private int dateSq;

    // 날짜 타입
    private Date dateType;

    // 시간 타입
    private Time timeType;

    // 연도 타입
    private Year yearType;

    // 타임스템프 타입
    private Timestamp timestampType;

    // 타임스탬프 타입(밀리세컨드)
    private Timestamp timestampMilsecType;

    // 타임스탬프 타입(마이크로세컨드)
    private Timestamp timestampMicrosecType;

    @Builder
    public DateInfoDto(int dateSq, Date dateType, Time timeType, Year yearType, Timestamp timestampType, Timestamp timestampMilsecType, Timestamp timestampMicrosecType) {
        this.dateSq = dateSq;
        this.dateType = dateType;
        this.timeType = timeType;
        this.yearType = yearType;
        this.timestampType = timestampType;
        this.timestampMilsecType = timestampMilsecType;
        this.timestampMicrosecType = timestampMicrosecType;
    }
}

 

 

 

 

 

 

2) 해결방법


💡 해결방법

- 우선, 해당 문제에 대해서는 Getter가 존재하지 않아서 발생하는 문제입니다.

- SQL 수행 결과를 DTO로 객체와 매핑을 하였지만 데이터를 받아오는 부분이 존재하지 않아서 생기는 문제였습니다.
- 위와 같은 경우에는 @Getter 어노테이션을 지정하였지만, build.gradle 파일 내에 annotationProcessor 'org.projectlombok:lombok'가 추가되지 않아서 lombok이 수행되지 않던 문제였습니다.

1. build.gradle


 💡 build.gradle

- 아래와 같이 complie 내에서는 lombok이 수행되어 서버가 실행되는 동안에 문제가 발생하지 않았지만, @Getter라는 메서드를 사용하기 위해서는 annotationProcessor 내에 라이브러리 추가가 되지 않았음을 확인하였습니다.

 

💡 그렇기에 아래와 같이 annotationProcessor 'org.projectlombok:lombok'를 추가하고 빌드를 수행하여 해당 문제를 해결하였습니다.

 

 

 

2. 문제 해결화면


💡 문제 해결화면

- 동일한 API 통신을 하였을 때, 데이터를 제대로 조회가 됨을 확인하여 문제를 해결하였습니다.

 

 

 

 

 

 

 

오늘도 감사합니다. 😀

 

 

 

그리드형