当前位置:网站首页>Utility gadget: kotlin code snippet
Utility gadget: kotlin code snippet
2022-07-27 05:24:00 【Master yuan】
List of articles
1. Convert any object to Map
inline fun <reified T : Any> T.asMap() : Map<String, Any?> {
val props = T::class.memberProperties.associateBy {
it.name }
return props.keys.associateWith {
props[it]?.get(this) }
}
2. practical ObjectMapper Convert objects
2.1 Object turn JsonString
data class Person(val name: String, var age: Int)
fun obj2JsonString(obj: Person){
val objectMapper = ObjectMapper().registerModule(JavaTimeModule()).disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES)
.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS)
return objectMapper.writeValueAsString(person)
}
2.2 JsonString Transfer object
data class Person(val name: String = " ", var age: Int = 23)
fun getPersonFromJsonString(): Person {
val objectMapper = ObjectMapper().registerModule(JavaTimeModule()).disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES)
.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS)
val jsonString = "{\"name\":\"tom\",\"age\":34}"
return objectMapper.readValue(jsonString, Person::class.java)
}
Be careful :
You can see , there data class Each field of is given a default value , If not , Will report a mistake :
Exception in thread "main" com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of `com.example.Person` (no Creators, like default constructor, exist): cannot deserialize from Object value (no delegate- or property-based Creator)
at [Source: (String)"{"name":"tom","age":34}"; line: 1, column: 2]
at com.fasterxml.jackson.databind.exc.InvalidDefinitionException.from(InvalidDefinitionException.java:67)
at com.fasterxml.jackson.databind.DeserializationContext.reportBadDefinition(DeserializationContext.java:1615)
at com.fasterxml.jackson.databind.DatabindContext.reportBadDefinition(DatabindContext.java:400)
at com.fasterxml.jackson.databind.DeserializationContext.handleMissingInstantiator(DeserializationContext.java:1077)
at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.deserializeFromObjectUsingNonDefault(BeanDeserializerBase.java:1332)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:331)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:164)
at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4524)
at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3466)
at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3434)
This is due to the lack of a parameterless constructor , and data class No parameterless constructor was generated , You need to add default values for each parameter , To generate a parameterless constructor .kotlin Official website There are 
For each data class Add default values for each attribute of , What an annoying thing ! Do you want everyone to write ? I don't want to .
Fortunately ,kotlin There are still official solutions :
Use no-arg Compiler plug-in , stay pom The following configuration is made in the file :
<plugin>
<artifactId>kotlin-maven-plugin</artifactId>
<groupId>org.jetbrains.kotlin</groupId>
<version>${kotlin.version}</version>
<configuration>
<compilerPlugins>
<!-- Or "jpa" for JPA support -->
<plugin>no-arg</plugin>
</compilerPlugins>
<pluginOptions>
<option>no-arg:annotation=com.my.Annotation</option>
<!-- Call instance initializers in the synthetic constructor -->
<!-- <option>no-arg:invokeInitializers=true</option> -->
</pluginOptions>
</configuration>
<dependencies>
<dependency>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-maven-noarg</artifactId>
<version>${kotlin.version}</version>
</dependency>
</dependencies>
</plugin>
2.3 JsonString Contained in the list
If json The string contains list, Then it should be written as :
data class Person(val name: String = " ", var age: Int = 23)
fun getPersonFromJsonString(): List<*> {
val objectMapper = ObjectMapper().registerModule(JavaTimeModule()).disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES)
.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS)
val jsonString = "[{\"name\":\"tom\",\"age\":34},{\"name\":\"tom\",\"age\":34}]"
return objectMapper.readValue(jsonString, List::class.java)}
But the result is list in ,list Elements in are not recognized , But rather linkedHashMap The form is stored in list Medium . If I want to extract specific object types , It should be :
data class Person(val name: String = " ", var age: Int = 23)
fun getPersonFromJsonString(): List<*> {
val objectMapper = ObjectMapper().registerModule(JavaTimeModule()).disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES)
.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS)
val jsonString = "[{\"name\":\"tom\",\"age\":34},{\"name\":\"tom\",\"age\":34}]"
var people: List<Person> = objectMapper.readValue(jsonString, objectMapper.typeFactory.constructCollectionType(List::class.java, Person::class.java))
return people
So you can get list Specific examples included in .
边栏推荐
- Quoted popular explanation
- File processing (IO)
- The interface can automatically generate E and other asynchronous access or restart,
- Alphabetic order problem
- Machine learning overview
- Solution to Dlib installation failure
- Laozi cloud and Fuxin Kunpeng achieved a major breakthrough in 3D ofd 3D format documents for the first time
- 李宏毅机器学习组队学习打卡活动day06---卷积神经网络
- 35.滚动 scroll
- 学生管理系统
猜你喜欢
随机推荐
JVM Part 1: memory and garbage collection part 5 -- runtime data area virtual machine stack
JVM Part 1: memory and garbage collection part 3 - runtime data area - overview and threads
Shell course summary
知识点总结(一)
接收方设置并发量和限流
Constraints of MySQL table
枚举类实现单例模式
DBUtils
SSM framework integration
B1028 人口普查
JVM上篇:内存与垃圾回收篇三--运行时数据区-概述及线程
Database design - relational data theory (ultra detailed)
Solution and principle analysis of feign call missing request header
What should test / development programmers over 35 do? Many objective factors
Basic operation of vim
李宏毅机器学习组队学习打卡活动day03---误差和梯度下降
如何快速有效解决数据库连接失败问题
35.滚动 scroll
Derivation and explanation of PBR physical illumination calculation formula
Set static IP for raspberry pie








