2016-03-29 25 views
4

Bazı veri sınıfını JSON nesneleri olarak göstermeye çalışıyorum ama çalışmayan bir şey var.İlkbahar/jackson ile JSON Kotlin veri sınıfı

Ben aşağıdaki veri sınıfları:

data class Link(
     @JsonProperty("rel") 
     @JsonView(View.Bind::class) 
     val rel: String, 

     @JsonProperty("method") 
     @JsonView(View.Bind::class) 
     val method: HttpMethod, 

     @JsonProperty("href") 
     @JsonView(View.Bind::class) 
     val href: String) 


data class MetaData(val status: HttpStatus) { 
    @JsonView(View.Bind::class) 
    @JsonProperty("status_code") 
    fun getStatusCode(): Int { 
     return status.value() 
    } 

    @JsonView(View.Bind::class) 
    @JsonProperty("status_desc") 
    fun getStatusDesc(): String { 
     return status.name 
    } 
} 

data class Payload(
     @JsonView(View.Bind::class) 
     @JsonProperty("payload") 
     val payload: Any, 

     @JsonProperty("_meta") 
     @JsonView(View.Bind::class) 
     val metaData: MetaData, 

     @JsonProperty("_links") 
     @JsonView(View.Bind::class) 
     val links: List<Link>) 

Ve Taşıma kapasitesi sınıf bir JAVA sınıf her şey iyi çalışır, ama bir KOTLIN sınıf olduğunda sadece yükleme elemanı JSON içine alır Bazı sebeplerden dolayı,

.

bağımlılık için ben kullanıyorum:

<dependency> 
    <groupId>org.jetbrains.kotlin</groupId> 
    <artifactId>kotlin-stdlib</artifactId> 
    <version>1.0.1-1</version> 
</dependency> 

<dependency> 
    <groupId>com.fasterxml.jackson.module</groupId> 
    <artifactId>jackson-module-kotlin</artifactId> 
    <version>2.7.1-2</version> 
</dependency> 

i "bağlantılar" elemanları oluşturulur "meta" ve "bağlantıları" dan "_meta" ve "_links" değiştirirseniz.

cevap

2

Ben 2.7'ye 2.7.1-2 gelen bağımlılıkları

<dependency> 
     <groupId>com.fasterxml.jackson.core</groupId> 
     <artifactId>jackson-core</artifactId> 
     <version>2.7.3</version> 
    </dependency> 

    <dependency> 
     <groupId>com.fasterxml.jackson.core</groupId> 
     <artifactId>jackson-annotations</artifactId> 
     <version>2.7.3</version> 
    </dependency> 

    <dependency> 
     <groupId>com.fasterxml.jackson.core</groupId> 
     <artifactId>jackson-databind</artifactId> 
     <version>2.7.3</version> 
    </dependency> 

    <dependency> 
     <groupId>com.fasterxml.jackson.module</groupId> 
     <artifactId>jackson-module-kotlin</artifactId> 
     <version>2.7.3</version> 
    </dependency> 

güncelleme formu jackson-module-kotlin aşağıdaki birleşimini kullanmak zorunda kaldı: Sana örnek, Application class yılında, ObjectMapper kayıtlı ettik de umut .3 problemde çok az fark vardı, ancak jackson-core, jackson-annotations ve jackson-databind'u dahil etmek zorunda kaldım. jackson-module-kotlin Sonunda

<mvc:annotation-driven> 
    <mvc:message-converters register-defaults="true"> 
     <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"> 
      <property name="objectMapper" ref="kotlinMapper" /> 
     </bean> 
    </mvc:message-converters> 
</mvc:annotation-driven> 

<bean id="kotlinMapper" 
     class="org.springframework.http.converter.json.Jackson2ObjectMapperFactoryBean"> 

    <property name="featuresToEnable"> 
     <array> 
      <util:constant static-field="com.fasterxml.jackson.databind.SerializationFeature.INDENT_OUTPUT" /> 
      <util:constant static-field="com.fasterxml.jackson.databind.SerializationFeature.WRITE_EMPTY_JSON_ARRAYS" /> 
     </array> 
    </property> 

    <property name="modulesToInstall" value="com.fasterxml.jackson.module.kotlin.KotlinModule" /> 
</bean> 

aşağıda gösterildiği gibi KOTLIN modülü sicil beni engelledi bazı sorunlar spring-webmvc@JsonProperty olanlar _ sadece iyi çalıştı vardı içinde

Aparently Jackson kavanoz dahil.

2

Verdiğiniz bilgilere dayanarak, sorun _ kullanarak JsonProperty value olarak görünüyor. Tüm özelliklerinizi _ numaralı telefondan _ içeriklerini gözlemlemiş olabilirsiniz. Tüm alt çizgilerinizi çıkarmayı deneyin ve görün.

@Bean 
open fun objectMapperBuilder(): Jackson2ObjectMapperBuilder 
     = Jackson2ObjectMapperBuilder().modulesToInstall(KotlinModule())