jackson support for kotlin
This commit is contained in:
parent
febda47e65
commit
f8d8ef684d
|
@ -0,0 +1,14 @@
|
||||||
|
/bin/
|
||||||
|
|
||||||
|
#ignore gradle
|
||||||
|
.gradle/
|
||||||
|
|
||||||
|
|
||||||
|
#ignore build and generated files
|
||||||
|
build/
|
||||||
|
node/
|
||||||
|
out/
|
||||||
|
|
||||||
|
#ignore installed node modules and package lock file
|
||||||
|
node_modules/
|
||||||
|
package-lock.json
|
|
@ -0,0 +1 @@
|
||||||
|
## Relevant articles:
|
|
@ -0,0 +1,34 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
<artifactId>kotlin-libraries-2</artifactId>
|
||||||
|
<name>kotlin-libraries-2</name>
|
||||||
|
<packaging>jar</packaging>
|
||||||
|
|
||||||
|
<parent>
|
||||||
|
<groupId>com.baeldung</groupId>
|
||||||
|
<artifactId>parent-kotlin</artifactId>
|
||||||
|
<version>1.0.0-SNAPSHOT</version>
|
||||||
|
<relativePath>../parent-kotlin</relativePath>
|
||||||
|
</parent>
|
||||||
|
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.fasterxml.jackson.module</groupId>
|
||||||
|
<artifactId>jackson-module-kotlin</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>junit</groupId>
|
||||||
|
<artifactId>junit</artifactId>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</dependencies>
|
||||||
|
|
||||||
|
<properties>
|
||||||
|
</properties>
|
||||||
|
|
||||||
|
</project>
|
|
@ -0,0 +1,11 @@
|
||||||
|
<configuration>
|
||||||
|
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
|
||||||
|
<encoder>
|
||||||
|
<pattern>%d{YYYY-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
|
||||||
|
</encoder>
|
||||||
|
</appender>
|
||||||
|
|
||||||
|
<root level="INFO">
|
||||||
|
<appender-ref ref="STDOUT"/>
|
||||||
|
</root>
|
||||||
|
</configuration>
|
|
@ -0,0 +1,8 @@
|
||||||
|
package com.baeldung.kotlin.jackson
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.annotation.*
|
||||||
|
|
||||||
|
@JsonInclude(JsonInclude.Include.NON_EMPTY)
|
||||||
|
data class Book(var title: String, @JsonProperty("author") var authorName: String) {
|
||||||
|
var genres: List<String>? = emptyList()
|
||||||
|
}
|
|
@ -0,0 +1,3 @@
|
||||||
|
package com.baeldung.kotlin.jackson
|
||||||
|
|
||||||
|
data class Movie(var name: String, var studio: String, var rating: Float? = 1f)
|
|
@ -0,0 +1,114 @@
|
||||||
|
package com.baeldung.kotlin.jackson
|
||||||
|
|
||||||
|
import org.junit.Test
|
||||||
|
import kotlin.test.assertTrue
|
||||||
|
import kotlin.test.assertFalse
|
||||||
|
import kotlin.test.assertEquals
|
||||||
|
import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper
|
||||||
|
import com.fasterxml.jackson.module.kotlin.readValue
|
||||||
|
import com.fasterxml.jackson.databind.ObjectMapper
|
||||||
|
import com.fasterxml.jackson.module.kotlin.KotlinModule
|
||||||
|
|
||||||
|
class JacksonUnitTest {
|
||||||
|
//val mapper = jacksonObjectMapper()
|
||||||
|
val mapper = ObjectMapper().registerModule(KotlinModule())
|
||||||
|
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun whenSerializeMovie_thenSuccess() {
|
||||||
|
val movie = Movie("Endgame", "Marvel", 9.2f)
|
||||||
|
val serialized = mapper.writeValueAsString(movie)
|
||||||
|
|
||||||
|
val json = """{"name":"Endgame","studio":"Marvel","rating":9.2}"""
|
||||||
|
assertEquals(serialized, json)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun whenDeserializeMovie_thenSuccess() {
|
||||||
|
val json = """{"name":"Endgame","studio":"Marvel","rating":9.2}"""
|
||||||
|
// val movie: Movie = mapper.readValue(json)
|
||||||
|
val movie = mapper.readValue<Movie>(json)
|
||||||
|
|
||||||
|
assertEquals(movie.name, "Endgame")
|
||||||
|
assertEquals(movie.studio, "Marvel")
|
||||||
|
assertEquals(movie.rating, 9.2f)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun whenDeserializeMovieWithMissingValue_thenUseDefaultValue() {
|
||||||
|
val json = """{"name":"Endgame","studio":"Marvel"}"""
|
||||||
|
val movie: Movie = mapper.readValue(json)
|
||||||
|
|
||||||
|
assertEquals(movie.name, "Endgame")
|
||||||
|
assertEquals(movie.studio, "Marvel")
|
||||||
|
assertEquals(movie.rating, 1f)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun whenSerializeMap_thenSuccess() {
|
||||||
|
val map = mapOf(1 to "one", 2 to "two")
|
||||||
|
val serialized = mapper.writeValueAsString(map)
|
||||||
|
|
||||||
|
val json = """{"1":"one","2":"two"}"""
|
||||||
|
assertEquals(serialized, json)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun whenDeserializeMap_thenSuccess() {
|
||||||
|
val json = """{"1":"one","2":"two"}"""
|
||||||
|
val aMap: Map<Int,String> = mapper.readValue(json)
|
||||||
|
|
||||||
|
assertEquals(aMap[1], "one")
|
||||||
|
assertEquals(aMap[2], "two")
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun whenSerializeList_thenSuccess() {
|
||||||
|
val movie1 = Movie("Endgame", "Marvel", 9.2f)
|
||||||
|
val movie2 = Movie("Shazam", "Warner Bros", 7.6f)
|
||||||
|
val movieList = listOf(movie1, movie2)
|
||||||
|
val serialized = mapper.writeValueAsString(movieList)
|
||||||
|
|
||||||
|
val json = """[{"name":"Endgame","studio":"Marvel","rating":9.2},{"name":"Shazam","studio":"Warner Bros","rating":7.6}]"""
|
||||||
|
assertEquals(serialized, json)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun whenDeserializeList_thenSuccess() {
|
||||||
|
val json = """[{"name":"Endgame","studio":"Marvel","rating":9.2},{"name":"Shazam","studio":"Warner Bros","rating":7.6}]"""
|
||||||
|
val movieList: List<Movie> = mapper.readValue(json)
|
||||||
|
|
||||||
|
val movie1 = Movie("Endgame", "Marvel", 9.2f)
|
||||||
|
val movie2 = Movie("Shazam", "Warner Bros", 7.6f)
|
||||||
|
assertTrue(movieList.contains(movie1))
|
||||||
|
assertTrue(movieList.contains(movie2))
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun whenSerializeBook_thenSuccess() {
|
||||||
|
val book = Book("Oliver Twist", "Charles Dickens")
|
||||||
|
val serialized = mapper.writeValueAsString(book)
|
||||||
|
|
||||||
|
val json = """{"title":"Oliver Twist","author":"Charles Dickens"}"""
|
||||||
|
assertEquals(serialized, json)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun whenDeserializeBook_thenSuccess() {
|
||||||
|
val json = """{"title":"Oliver Twist","author":"Charles Dickens"}"""
|
||||||
|
val book: Book = mapper.readValue(json)
|
||||||
|
|
||||||
|
assertEquals(book.title, "Oliver Twist")
|
||||||
|
assertEquals(book.authorName, "Charles Dickens")
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun givenJsonInclude_whenSerializeBook_thenEmptyFieldExcluded() {
|
||||||
|
val book = Book("Oliver Twist", "Charles Dickens")
|
||||||
|
val serialized = mapper.writeValueAsString(book)
|
||||||
|
|
||||||
|
val json = """{"title":"Oliver Twist","author":"Charles Dickens"}"""
|
||||||
|
assertEquals(serialized, json)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue