스프링

enum 타입(key-value)의 Json 반환, 객체를 Json 직렬화

salmon16 2024. 5. 17. 01:59

개요

프로젝트에서 enum 타입을 key-value로 사용하고 있었다. 

이를 원하는 Json형식으로 변경하는 과정을 담으려고 한다.

 

본문

프로젝트에서 지하철 라인을 enum 타입으로 관리하고 있었다.

public enum SubwayLine {
    LINE_1("1호선"),
    LINE_2("2호선"),
    LINE_3("3호선"),
    LINE_4("4호선"),
    DONGHAE("동해선"),
    GIMHAE_LIGHT_RAIL("부산김해경전철");

    private String lineName;

 

지하철 라인을 담은 Dto를 아래와 같이 작성했다고 가정하자.

public class TestDto {
    
    private Long id;    
    private String name;
    private SubwayLine subwayLine;

 

Dto에 subwayLine과 같이 enum 타입을 넣어주고 Json으로 반환을 하게 된다면

key 값(LINE_1, LINE_2, LINE_3..)이 Json에 담긴다.

이때 value 값(1호선, 2호선...)을 Json으로 담으려면 @JsonValue 어노테이션을 사용하면 된다.

public enum SubwayLine {
    LINE_1("1호선"),
    LINE_2("2호선"),
    LINE_3("3호선"),
    LINE_4("4호선"),
    DONGHAE("동해선"),
    GIMHAE_LIGHT_RAIL("부산김해경전철");

    private String lineName;

    @JsonValue
    public String getLineName() {
        return lineName;
    }
}

위 코드와 같이 Json으로 담고 싶은 것을 JsonValue 함수에서 retun을 하면 Json으로 lineName이 담기는 것을 확인할 수 있다.

 

@JsonValue

JsonVale 어노테이션이란 Jackson 라이브러리에서 JSON 직렬화 및 역직렬화 프로세스에서 사용된다.

이 어노테이션이 붙여진 경우 해당 메서드의 반환 값이 객체가 JSON으로 직렬화될 때 어떤 값을 사용할지를 정할 수 있다.