JSON Property 동적으로 내보내기

Kyu·2022년 6월 16일
1

Spring 공부기록

목록 보기
9/10

AOS/iOS 푸시를 보낼떄 동적으로 프로퍼티 이름을 변경해줘야할 필요성을 느꼈다.

// 기존 AOS만 사용할때 코드
public class PushDto {
    @JsonIgnore
    public static final String REQUEST_URL = "https://fcm.googleapis.com/fcm/send";

    @JsonProperty("data")
    private PushNoti pushNoti;
    private String to;
    private String priority;
    
    /* ... */

원래는 프로퍼티 이름이 "data" 이기만 하면 됐다.
그런데 iOS 에선 "notification" 으로 변경 해줘야 했다.
다른 클래스를 생성하기는 그렇고, 아래처럼 동적으로 JsonProperty 이름을 설정해줄 수 있다.

// AOS/iOS 동시에 같은 Dto로 사용하고 싶을 때
public class PushDto {
   @JsonIgnore
   public static final String REQUEST_URL = "https://fcm.googleapis.com/fcm/send";

   private Map<String, PushNoti> pushNoti;
   private String to;
   private String priority;
    
   /* ... */
   
   @JsonAnyGetter
   public Map<String, PushNoti> getPushNoti() {
        return this.PushNoti;
   }
   
   public void setPushNoti(Map<String, PushNoti> pushNoti) {
        this.pushNoti = pushNoti;
   }

@JsonAnySetter 하는 부분에서 Collections.singletonMap("붙이고 싶은 property 이름", pushNoti); 를 인자로 넣어주면 깔끔하게 끝난다.

프로퍼티 이름을 동적으로 변경하는 것 외에 여러가지 사용용도가 있어보이므로 기억하면 좋을 어노테이션인것 같다

profile
TIL 남기는 공간입니다

0개의 댓글