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); 를 인자로 넣어주면 깔끔하게 끝난다.
프로퍼티 이름을 동적으로 변경하는 것 외에 여러가지 사용용도가 있어보이므로 기억하면 좋을 어노테이션인것 같다