본문 바로가기

Trouble Shooting

[Spring Boot] json response할 때 Enum 객체 전체 보여주기

문제 발생

Enum

@AllArgsConstructor
@Getter
public enum Foo {

  A("에이", "a"),
  B("비", "b"),
  C("씨", "c");

  private String korean;
  private String small;

}

 

Controller

@RestController
public class EnumController {

  @GetMapping("/enum/{code}")
  private RestResponse showFoo(@PathVariable String code){
    return new RestResponse(true, Foo.valueOf(code));
  }
}

 

Response 객체

@Getter
public class RestResponse {

  private boolean success;

  private Foo data;

  public RestResponse(boolean success, Foo data) {
    this.success = success;
    this.data = data;
  }
}

위와 같이 코드 값을 주소에 입력받으면,

코드에 해당하는 전체 객체를 리턴해주고 싶은데, 아래와 같이 출력됐다.

해결 방법

1. Enum 객체 전체 리턴해주기

@JsonFormat(shape = Shape.OBJECT) // 추가
@AllArgsConstructor
@Getter
public enum Foo {

  A("에이", "a"),
  B("비", "b"),
  C("씨", "c");

  private String korean;
  private String small;

}

Enum 객체에 @JsonFormat 어노테이션을 추가해준다.

리턴받는 기댓값은 객체 형태이기 때문에 Shape.OBJECT로 설정해준다.

 

2. 값만 리턴해주기

@AllArgsConstructor
@Getter
public enum Foo {

  A("에이", "a"),
  B("비", "b"),
  C("씨", "c");

  @JsonValue // 추가
  private String korean;
  private String small;

}

만약 특정 값만 리턴하고 싶다면, 변수에 @JsonValue 어노테이션을 추가해준다.

상황에 따라 골라서 쓰면 될 것 같다. 😁