aboutsummaryrefslogtreecommitdiff
path: root/kvision-modules/kvision-server-spring-boot/src/main/kotlin
diff options
context:
space:
mode:
authorRobert Jaros <rjaros@finn.pl>2020-01-16 17:21:46 +0100
committerRobert Jaros <rjaros@finn.pl>2020-01-16 17:21:46 +0100
commitd79881420b4564a4dfb40f13d3b0623b4fbc46ad (patch)
treef92e174e693383e3446fd40db922ae3c5f2502be /kvision-modules/kvision-server-spring-boot/src/main/kotlin
parent433cd06aed92b7ae588608b45783d6173ea1d776 (diff)
downloadkvision-d79881420b4564a4dfb40f13d3b0623b4fbc46ad.tar.gz
kvision-d79881420b4564a4dfb40f13d3b0623b4fbc46ad.tar.bz2
kvision-d79881420b4564a4dfb40f13d3b0623b4fbc46ad.zip
Support for custom Decimal type in the common target
Diffstat (limited to 'kvision-modules/kvision-server-spring-boot/src/main/kotlin')
-rw-r--r--kvision-modules/kvision-server-spring-boot/src/main/kotlin/pl/treksoft/kvision/remote/KVServiceManager.kt5
-rw-r--r--kvision-modules/kvision-server-spring-boot/src/main/kotlin/pl/treksoft/kvision/types/Decimal.kt47
2 files changed, 51 insertions, 1 deletions
diff --git a/kvision-modules/kvision-server-spring-boot/src/main/kotlin/pl/treksoft/kvision/remote/KVServiceManager.kt b/kvision-modules/kvision-server-spring-boot/src/main/kotlin/pl/treksoft/kvision/remote/KVServiceManager.kt
index fcd4b411..291a9481 100644
--- a/kvision-modules/kvision-server-spring-boot/src/main/kotlin/pl/treksoft/kvision/remote/KVServiceManager.kt
+++ b/kvision-modules/kvision-server-spring-boot/src/main/kotlin/pl/treksoft/kvision/remote/KVServiceManager.kt
@@ -43,6 +43,7 @@ import org.springframework.web.reactive.function.server.bodyValueAndAwait
import org.springframework.web.reactive.function.server.json
import org.springframework.web.reactive.socket.WebSocketSession
import pl.treksoft.kvision.types.*
+import java.math.BigDecimal
import java.time.LocalDate
import java.time.LocalDateTime
import java.time.LocalTime
@@ -83,11 +84,13 @@ actual open class KVServiceManager<T : Any> actual constructor(val serviceClass:
module.addSerializer(LocalTime::class.java, LocalTimeSerializer())
module.addSerializer(OffsetDateTime::class.java, OffsetDateTimeSerializer())
module.addSerializer(OffsetTime::class.java, OffsetTimeSerializer())
+ module.addSerializer(BigDecimal::class.java, BigDecimalSerializer())
module.addDeserializer(LocalDateTime::class.java, LocalDateTimeDeserializer())
module.addDeserializer(LocalDate::class.java, LocalDateDeserializer())
module.addDeserializer(LocalTime::class.java, LocalTimeDeserializer())
module.addDeserializer(OffsetDateTime::class.java, OffsetDateTimeDeserializer())
module.addDeserializer(OffsetTime::class.java, OffsetTimeDeserializer())
+ module.addDeserializer(BigDecimal::class.java, BigDecimalDeserializer())
this.registerModule(module)
}
var counter: Int = 0
@@ -152,7 +155,7 @@ actual open class KVServiceManager<T : Any> actual constructor(val serviceClass:
JsonRpcResponse(
id = jsonRpcRequest.id,
error = e.message ?: "Error",
- exceptionType = e.javaClass.canonicalName
+ exceptionType = e.javaClass.canonicalName
)
)
)
diff --git a/kvision-modules/kvision-server-spring-boot/src/main/kotlin/pl/treksoft/kvision/types/Decimal.kt b/kvision-modules/kvision-server-spring-boot/src/main/kotlin/pl/treksoft/kvision/types/Decimal.kt
new file mode 100644
index 00000000..1d37ae51
--- /dev/null
+++ b/kvision-modules/kvision-server-spring-boot/src/main/kotlin/pl/treksoft/kvision/types/Decimal.kt
@@ -0,0 +1,47 @@
+/*
+ * Copyright (c) 2017-present Robert Jaros
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+package pl.treksoft.kvision.types
+
+import com.fasterxml.jackson.core.JsonGenerator
+import com.fasterxml.jackson.core.JsonParser
+import com.fasterxml.jackson.databind.DeserializationContext
+import com.fasterxml.jackson.databind.JsonDeserializer
+import com.fasterxml.jackson.databind.JsonSerializer
+import com.fasterxml.jackson.databind.SerializerProvider
+import java.io.IOException
+import java.math.BigDecimal
+
+actual typealias Decimal = BigDecimal
+
+class BigDecimalSerializer : JsonSerializer<BigDecimal>() {
+ @Throws(IOException::class)
+ override fun serialize(value: BigDecimal, gen: JsonGenerator, provider: SerializerProvider) {
+ gen.writeNumber(value.toDouble())
+ }
+}
+
+class BigDecimalDeserializer : JsonDeserializer<BigDecimal>() {
+ @Throws(IOException::class)
+ override fun deserialize(p: JsonParser, ctx: DeserializationContext): BigDecimal? {
+ return p.doubleValue.toBigDecimal()
+ }
+}