티스토리 뷰
일반적으로 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
- Total
- Today
- Yesterday
- Spring
- 북리뷰
- input
- 오라클
- svn
- config-location
- Spring Security
- mybatis
- intellij
- window
- LocalDate
- rocky
- Linux
- oracle
- maven
- Bash tab
- JavaScript
- jQuery
- 베리 심플
- claude
- localtime
- Java
- mybatis config
- LocalDateTime
- springboot
- Kotlin
- elasticsearch
- Mac
- docker
- k8s
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |