fix: about kotlinx.serialize

This commit is contained in:
server_main
2026-08-17 12:45:36 +00:00
parent 0536ffd632
commit 53855df24a
5 changed files with 43 additions and 3 deletions
+2 -1
View File
@@ -1,12 +1,13 @@
plugins { plugins {
kotlin("jvm") version "2.3.21" kotlin("jvm") version "2.3.21"
kotlin("plugin.spring") version "2.3.21" kotlin("plugin.spring") version "2.3.21"
id("org.jetbrains.kotlin.plugin.serialization") version "2.4.20-RC"
id("org.springframework.boot") version "4.1.0" id("org.springframework.boot") version "4.1.0"
id("io.spring.dependency-management") version "1.1.7" id("io.spring.dependency-management") version "1.1.7"
} }
group = "club.itstudio" group = "club.itstudio"
version = "0.1.0" version = "0.1.1"
description = "itmanager" description = "itmanager"
java { java {
@@ -1,5 +1,6 @@
package club.itstudio.itmanager.config package club.itstudio.itmanager.config
import club.itstudio.itmanager.utils.customSerializersModule
import kotlinx.serialization.json.Json import kotlinx.serialization.json.Json
import org.springframework.context.annotation.Bean import org.springframework.context.annotation.Bean
import org.springframework.context.annotation.Configuration import org.springframework.context.annotation.Configuration
@@ -9,6 +10,7 @@ class SerializationConfig {
@Bean @Bean
fun kotlinxSerializationJson(): Json = Json { fun kotlinxSerializationJson(): Json = Json {
serializersModule = customSerializersModule
ignoreUnknownKeys = true ignoreUnknownKeys = true
isLenient = true isLenient = true
encodeDefaults = false encodeDefaults = false
@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.annotation.TableName
import club.itstudio.itmanager.entity.DataCopy import club.itstudio.itmanager.entity.DataCopy
import club.itstudio.itmanager.entity.enums.FinanceRecordType import club.itstudio.itmanager.entity.enums.FinanceRecordType
import kotlinx.datetime.LocalDateTime import kotlinx.datetime.LocalDateTime
import kotlinx.serialization.Contextual
import kotlinx.serialization.Serializable import kotlinx.serialization.Serializable
import java.math.BigDecimal import java.math.BigDecimal
@@ -17,7 +18,7 @@ data class FinanceRecord(
val recordNo: String? = null, val recordNo: String? = null,
val type: FinanceRecordType = FinanceRecordType.OTHER, val type: FinanceRecordType = FinanceRecordType.OTHER,
val relatedItemId: Long? = null, val relatedItemId: Long? = null,
val amount: BigDecimal = BigDecimal.ZERO, val amount: @Contextual BigDecimal = BigDecimal.ZERO,
val currency: String = "CNY", val currency: String = "CNY",
val vendor: String? = null, val vendor: String? = null,
val occurredAt: LocalDateTime? = null, val occurredAt: LocalDateTime? = null,
@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.annotation.TableName
import club.itstudio.itmanager.entity.DataCopy import club.itstudio.itmanager.entity.DataCopy
import kotlinx.datetime.LocalDate import kotlinx.datetime.LocalDate
import kotlinx.datetime.LocalDateTime import kotlinx.datetime.LocalDateTime
import kotlinx.serialization.Contextual
import kotlinx.serialization.Serializable import kotlinx.serialization.Serializable
import java.math.BigDecimal import java.math.BigDecimal
@@ -23,7 +24,7 @@ data class Item(
val totalQuantity: Int = 0, val totalQuantity: Int = 0,
val availableQuantity: Int = 0, val availableQuantity: Int = 0,
val unit: String = "件", val unit: String = "件",
val price: BigDecimal? = null, val price: @Contextual BigDecimal? = null,
val purchaseDate: LocalDate? = null, val purchaseDate: LocalDate? = null,
val supplier: String? = null, val supplier: String? = null,
val status: String = "normal", val status: String = "normal",
@@ -0,0 +1,35 @@
package club.itstudio.itmanager.utils
import kotlinx.serialization.KSerializer
import kotlinx.serialization.SerializationException
import kotlinx.serialization.descriptors.PrimitiveKind
import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor
import kotlinx.serialization.descriptors.SerialDescriptor
import kotlinx.serialization.encoding.Decoder
import kotlinx.serialization.encoding.Encoder
import kotlinx.serialization.json.JsonDecoder
import kotlinx.serialization.json.JsonPrimitive
import kotlinx.serialization.modules.SerializersModule
import kotlinx.serialization.modules.contextual
import java.math.BigDecimal
object BigDecimalSerializer : KSerializer<BigDecimal> {
override val descriptor: SerialDescriptor =
PrimitiveSerialDescriptor("BigDecimal", PrimitiveKind.STRING)
override fun serialize(encoder: Encoder, value: BigDecimal) {
encoder.encodeString(value.toPlainString())
}
override fun deserialize(decoder: Decoder): BigDecimal {
val element = (decoder as JsonDecoder).decodeJsonElement()
if (element !is JsonPrimitive) {
throw SerializationException("Expected JSON primitive, got $element")
}
return element.content.toBigDecimal()
}
}
val customSerializersModule = SerializersModule {
contextual(BigDecimalSerializer)
}