Java Http Response Enum 타입 - 열거형 클래스 반환
일반적으로 enum 클래스는 마셜링할 때 enum 상수 이름 그대로 변경된다.
마셔링 과정에서 enum 상수를 변경할 때 toString() 메서드를 사용하고, 이 메서드가 enum 상수 이름을 리턴하기 때문이다.
이런 방식은 REST-API 응답을 유연하게 설계할 수 없고, REST-API 설계에 따라 코드에도 영향을 주므로 유연한 프로그래밍을 할 수 없다.
그래서 응답 값과 enum 상수 값은 따로 분리하면 좋다.
ex) 애플리케이션 에서는 SINGLE 이라는 enum 상수값이지만 클라이언트에게 응답할 때는 "single"이라는 문자열 값을 리턴.
public enum HotelRoomType {
SINGLE("single"),
DOUBLE("double"),
TRIPLE("triple"),
QUAD("quad");
private final static Map<String, HotelRoomType> paramMap = Arrays.stream(HotelRoomType.values()).collect(Collectors.toMap(HotelRoomType::getParam, Function.identity()));
private final String param;
HotelRoomType(String param) {
this.param = param;
}
@JsonValue
public String getParam() {
return param;
}
@JsonCreator
public static HotelRoomType fromParam(String param) {
return Optional.ofNullable(param)
.map(paramMap::get)
.orElseThrow(() -> new IllegalArgumentException("param is not valid"));
}
}
다음 HotelRoomType enum 클래스는 열거형 상수가 선언되어 있고 각 열거형 상수가 마셜링 될 때 클라이언트에게 열거형 상수 이름이이 아닌 문자열로 변경할 수 있는지 확인해본다.
마셜링 과정에서 값을 변경하는 메서드를 지정하는 @JsonCreator 애너테이션 설정이 되어 있다.
그러므로 마셜링 과정에서 JSON 속성 값이 "single"이면 formParam 메서드가 SINGLE로 변경한다.
@JsonValue 애너테이션은 마셜링 과정에서 enum을 문자열 변환하는데 사용하는 toString() 메서드를 대신할 메서드를 설정하는 데 사용된다.
코드에서는 getParam() 메서드가 리턴하는 문자열이 JSON 속성 값으로 사용된다.
참고
https://www.yes24.com/Product/Goods/115306377
스프링 부트로 개발하는 MSA 컴포넌트 - 예스24
마이크로서비스 아키텍처 환경에서컴포넌트를 개발할 때 무엇이 필요한지 알아보고,이때 필요한 스프링 부트 사용법을 익힌다!마이크로서비스 아키텍처는 대규모 서비스의 ‘정답’처럼 여겨
www.yes24.com