2017-01-16 2 views
0

JSONのクラスを解析するために、Apple Push Notification Serviceに取り組んでいます。そして、私はApnsPayloadクラスを持っていて、最後のJSONに余分な、オプションの動的なacmeのプロパティを追加したいと考えています。それは...私は、以下のジャクソンの出力を変換する。これにJackson Jsonシリアライザを使用してインナープロパティを追加する

{ 
    "aps": { 
     "alert": { 
      "body": "body", 
      "title": "title" 
     }, 
     "badge": 123, 
     "category": "category" 
    }, 
    "acme": { 
     "1": "1", 
     "value1": "value1" 
    } 
} 

...私は成功し@JsonNaming()でそれらのキーにプレフィックスacme-を追加した

{ 
    "aps": { 
     "alert": { 
      "body": "body", 
      "title": "title" 
     }, 
     "badge": 123, 
     "category": "category" 
    }, 
    "acme-1": "1", 
    "acme-value1": "value1" 
} 

、しかし、私はそれらを移動することはできませんを意味し、プロパティを1つのレベルで助けてください、ありがとう!

@Value 
@Builder 
@JsonInclude(JsonInclude.Include.NON_NULL) 
// need a serializer to move up properties in Acme by one level 
// @JsonSerialize(using = NewSerializer.class) 
public class ApnsPayload { 

    private Aps aps; 

    private Acme acme; 

    @JsonNaming(AcmeNamingStrategy.class) // add prefix acme- 
    public interface Acme { 
    } 

    @Value 
    @Builder 
    @JsonInclude(JsonInclude.Include.NON_NULL) 
    public static class Aps { 

     private Alert alert; 

     private Integer badge; 

     private String sound; 

     @JsonProperty("content-available") 
     private Integer contentAvailable; 

     private String category; 

     @JsonProperty("thread-id") 
     private String threadId; 

     @Value 
     @Builder 
     @JsonInclude(JsonInclude.Include.NON_NULL) 
     public static class Alert { 

      private String title; 
      private String body; 

      @JsonProperty("title-loc-key") 
      private String titleLocalizationKey; 

      @JsonProperty("title-loc-args") 
      private List<String> titleLocalizationArgs; 

      @JsonProperty("action-loc-key") 
      private String actionLocalizationKey; 

      @JsonProperty("loc-key") 
      private String localizationKey; 

      @JsonProperty("loc-args") 
      private List<String> localizationArgs; 

      @JsonProperty("launch-image") 
      private String launchImage; 
     } 
    } 
} 

答えて

1

LOL、私はこの質問を投稿してから2分後に答えを見つけました。必要なのは、Jackson Unwrapping Featureです。アンラップするプロパティに@JsonUnwrappedを追加します。

@JsonUnwrapped 
private Acme acme; 
関連する問題