❌no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS) (through reference chain: java.util.ImmutableCollections$ListN[0]

박용민·2024년 3월 7일
0

프로젝트를 작성하던 중 Dto를 어떻게 만들면 좋을까라는 고민일 계속하던 와중 다음과 같은 오류가 발생하였다.

@Getter
public class GameVideoResponse {

  private String title;
  private String contents;
  private String videoPath;
  private int viewCount;
  private GameResponse game;

  public GameVideoResponse(GameVideo gameVideo) {
    this.title = gameVideo.getTitle();
    this.contents = gameVideo.getContents();
    this.videoPath = gameVideo.getVideoPath();
    this.viewCount = gameVideo.getViewCount();
    this.game = new GameResponse(gameVideo.getGame());
  }

  public class GameResponse {

    private Long id;
    private String title;
    private String logo;

    public GameResponse(Game game) {
      this.id = game.getId();
      this.title = game.getTitle();
      this.logo = game.getLogo();
    }
  }
}

클래스 내부에서 또 다른 클래스를 선언해서 Dto를 깔끔하게 만드는게 목적이였다.
해당 오류는 클래스를 직렬화 할 수 없다는 뜻으로 직렬화를 가능하게 만드는 것이 목표다.

@Getter

@Getter를 사용하여 게터 메서드를 만들어 직렬화를 하는 방법 Java 객체의 속성을 JSON 필드와 매핑할 때 사용된다.

@JsonProperty

@JsonProperty를 사용해서 직렬화 하는 방법

public class GameResponse {
    private String gameTitle;
    private String genre;

    @JsonProperty
    public String getGameTitle() {
        return gameTitle;
    }

    @JsonProperty
    public String getGenre() {
        return genre;
    }
}

나는 @Getter를 사용하여 해결하였다.

@Getter
public class GameVideoResponse {

  private String title;
  private String contents;
  private String videoPath;
  private int viewCount;
  private GameResponse game;

  public GameVideoResponse(GameVideo gameVideo) {
    this.title = gameVideo.getTitle();
    this.contents = gameVideo.getContents();
    this.videoPath = gameVideo.getVideoPath();
    this.viewCount = gameVideo.getViewCount();
    this.game = new GameResponse(gameVideo.getGame());
  }

  @Getter
  public class GameResponse {
    private Long id;
    private String title;
    private String logo;

    public GameResponse(Game game) {
      this.id = game.getId();
      this.title = game.getTitle();
      this.logo = game.getLogo();
    }
  }
}

🎉DONE

0개의 댓글