문제 발생
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
어노테이션을 추가해준다.
상황에 따라 골라서 쓰면 될 것 같다. 😁