Kotlin数据类到JSON与春天/杰克逊

我试图公开一些数据类作为JSON对象,但有些不工作。

我有以下数据类:

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>) 

由于某种原因,当Payload类是一个JAVA类时,一切正常,但是当它是一个kotlin类时,只有有效载荷元素进入JSON。

对于依赖我使用:

 <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> 

如果我将“_meta”和“_links”更改为“meta”和“links”,则会显示“links”元素。

我不得不使用下面的依赖关系组合

  <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> 

从2.7.1-2到2.7.3的更新形式jackson-module-kotlin在这个问题上几乎没有任何jackson-module-kotlin ,但我有义务包括jackson-corejackson-annotationsjackson-databind

另外jackson-module-kotlin包含的杰克逊jar有一些问题spring-webmvc阻止我注册kotlin模块,如下所示

 <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> 

最后, @JsonProperty _工作得很好。

根据您提供的信息,问题似乎与使用_作为JsonProperty value 。 您可能已经观察到所有的MetaData属性都包含_ 。 尝试删除所有的下划线,看看。 我也希望你已经注册了你的Application classObjectMapper例子:

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