Usage of Jackson @JsonProperty annotation for kotlin data classes

后端 未结 6 1226
野趣味
野趣味 2020-12-09 07:14

kotlin 1.2.10 jackson-module-kotlin:2.9.0

I have the following data class in kotlin:

data class CurrencyInfo(
        @JsonProperty(\"currency_info\"         


        
6条回答
  •  感情败类
    2020-12-09 08:08

    You can do something like this:

    data class CurrencyInfo @JsonCreator constructor (
            @param:JsonProperty("currency_info") 
            @get:JsonProperty("currency_info")
            val currencyInfo: CurrencyInfoItem?
    )
    

    code above translates to java as:

    public final class CurrencyInfo {
       @Nullable
       private final String currencyInfo;
    
       @JsonProperty("currency_info")
       @Nullable
       public final String getCurrencyInfo() {
          return this.currencyInfo;
       }
    
       @JsonCreator
       public CurrencyInfo(@JsonProperty("currency_info") @Nullable String currencyInfo) {
          this.currencyInfo = currencyInfo;
       }
    }
    

    code from accepted answer translates to java as following:

    First (is not pure immutable):

    @JsonAutoDetect(
       fieldVisibility = Visibility.ANY
    )
    public final class CurrencyInfo {
       @Nullable
       private String currencyInfo;
    
       @Nullable
       public final String getCurrencyInfo() {
          return this.currencyInfo;
       }
    
       public final void setCurrencyInfo(@Nullable String var1) {
          this.currencyInfo = var1;
       }
    
       public CurrencyInfo(@JsonProperty("currency_info") @Nullable String currencyInfo) {
          this.currencyInfo = currencyInfo;
       }
    }
    

    Second (probably has problems with deserialization):

    public final class CurrencyInfo {
       @Nullable
       private final String currencyInfo;
    
       @JsonProperty("currency_info")
       @Nullable
       public final String getCurrencyInfo() {
          return this.currencyInfo;
       }
    
       public CurrencyInfo(@Nullable String currencyInfo) {
          this.currencyInfo = currencyInfo;
       }
    }
    

提交回复
热议问题