Clase de datos de Kotlin a JSON con Spring / Jackson

Estoy tratando de exponer algunas classs de datos como objects JSON pero algo no funciona.

Tengo las siguientes classs de datos:

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

Y por alguna razón, cuando la class Payload es una class JAVA, todo funciona bien, pero cuando se trata de una class kotlin, solo el elemento de carga entra al JSON.

Para la dependencia que estoy usando:

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

Si cambio el "_meta" y los "enlaces" a "meta" y "enlaces", se mostrarán los elementos de "enlaces".

Tuve que usar la siguiente combinación de dependencies

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

La actualización de jackson-module-kotlin de 2.7.1-2 a 2.7.3 tuvo poca o ninguna diferencia en el problema, pero estaba obligado a include el jackson-core , jackson-annotations jackson-databind .

Aparently el jackson incluido en el jackson-module-kotlin tenía algunos problemas spring-webmvc que me impedían registrar el module kotlin como se muestra a continuación

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

Al final, esos _ en @JsonProperty funcionaron bien.

Según la información que proporcionó, el problema parece ser el uso de _ como JsonProperty value . Es posible que haya observado que todas sus properties para MetaData contienen _ . Intente eliminar todos los guiones bajos y vea. Espero que también hayas registrado ObjectMapper , ejemplo en tu Application class :

 @Bean open fun objectMapperBuilder(): Jackson2ObjectMapperBuilder = Jackson2ObjectMapperBuilder().modulesToInstall(KotlinModule()) 
  • Integración de HTML y CSS con Kotlin y Spring MVC
  • ¿Por qué Kotlin con Spring MVC JSON devuelve un object vacío?
  • Exception Handler no funciona con `spring-boot-starter-data-rest`
  • Spring MVC Error 404 Bad Request Kotlin
  • use kotlin para springmvc No se pudo crear una instancia de la class de datos de la class bean
  • Tenga la security de que multiparte es nulo en el controller de descanso
  • kotlin y @Valid Spring anotación
  • Spring Boot .mustache Extensión de file
  • Spring Data JPA / Hibernate "No se puede ubicar Attribute con el nombre de stack"
  • Probar los methods @Async de devolución de vacío de Testing
  • Crear un propio DataSource con properties de resorte