fix: about kotlinx.serialize
This commit is contained in:
@@ -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)
|
||||
}
|
||||
Reference in New Issue
Block a user