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