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 {
kotlin("jvm") 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("io.spring.dependency-management") version "1.1.7"
}
group = "club.itstudio"
version = "0.1.0"
version = "0.1.1"
description = "itmanager"
java {
@@ -1,5 +1,6 @@
package club.itstudio.itmanager.config
import club.itstudio.itmanager.utils.customSerializersModule
import kotlinx.serialization.json.Json
import org.springframework.context.annotation.Bean
import org.springframework.context.annotation.Configuration
@@ -9,6 +10,7 @@ class SerializationConfig {
@Bean
fun kotlinxSerializationJson(): Json = Json {
serializersModule = customSerializersModule
ignoreUnknownKeys = true
isLenient = true
encodeDefaults = false
@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.annotation.TableName
import club.itstudio.itmanager.entity.DataCopy
import club.itstudio.itmanager.entity.enums.FinanceRecordType
import kotlinx.datetime.LocalDateTime
import kotlinx.serialization.Contextual
import kotlinx.serialization.Serializable
import java.math.BigDecimal
@@ -17,7 +18,7 @@ data class FinanceRecord(
val recordNo: String? = null,
val type: FinanceRecordType = FinanceRecordType.OTHER,
val relatedItemId: Long? = null,
val amount: BigDecimal = BigDecimal.ZERO,
val amount: @Contextual BigDecimal = BigDecimal.ZERO,
val currency: String = "CNY",
val vendor: String? = null,
val occurredAt: LocalDateTime? = null,
@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.annotation.TableName
import club.itstudio.itmanager.entity.DataCopy
import kotlinx.datetime.LocalDate
import kotlinx.datetime.LocalDateTime
import kotlinx.serialization.Contextual
import kotlinx.serialization.Serializable
import java.math.BigDecimal
@@ -23,7 +24,7 @@ data class Item(
val totalQuantity: Int = 0,
val availableQuantity: Int = 0,
val unit: String = "件",
val price: BigDecimal? = null,
val price: @Contextual BigDecimal? = null,
val purchaseDate: LocalDate? = null,
val supplier: String? = null,
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)
}