Intereting Posts
как конвертировать дату UTC в местное время GMT на Android Лямбда в выражении типа множественного типа сообщение не получено в чате Bluetooth. Разве мой обработчик сломан? Почему использование аннотаций Scopes и Singleton в Dagger2 с kotlin вызывает ошибку при компиляции? Как создать фиксированный размер IntArray и инициализировать массив позже в Котлин? Что такое синтаксис класса <? extends class_name> в kotlin? Как настроить задачу processResources в сборке Gradle Kotlin Не удалось «findViewById» в Котлине. Получение ошибки «Ошибка ввода типа» Активность фрагмента фрагмента kotlin имеет вид с одинаковым идентификатором, это не нормально Как вы объявляете глобальную переменную для MediaPlayer? Явное наследование от Any в Kotlin – Can и как это делается? Аннотации в Котлине не работают Можем ли мы использовать общие методы infix в Котлин? проблемы с макетами и ошибки в приложении android, разработанные с использованием kotlin При обработке аннотаций произошла некоторая ошибка (ошибки)

Класс данных Kotlin для JSON с пружиной / jackson

Я пытаюсь выставить некоторый класс данных как объекты 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> 

Форма обновления jackson-module-kotlin от 2.7.1-2 до 2.7.3 практически не имела никакого различия в этой проблеме, но я был обязан включать jackson-core , jackson-annotations и jackson-databind .

По-видимому, у jsonson jar, включенного в jackson-module-kotlin были некоторые проблемы 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 , проблема, похоже, JsonProperty value с использованием _ как JsonProperty value . Возможно, вы заметили, что все ваши свойства для MetaData содержат _ . Попробуйте удалить все подчеркивания и посмотреть. Я надеюсь, вы также зарегистрировали ObjectMapper , например, в своем Application class :

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