gpt4 book ai didi

spring - 将Spring的ObjectMapper与Kotlin燃料一起使用

转载 作者:行者123 更新时间:2023-12-02 13:22:16 26 4
gpt4 key购买 nike

我在kotlin spring应用程序中使用燃料进行HTTP集成,有一种方法可以使用Jackson进行JSON序列化/反序列化。
但是,映射器是FuelJackson.kt中的一个val。
有没有一种方法可以将Spring配置为Jackson的Jackson Objectmapper定义为bean?

最佳答案

有一个类接受 Spring 初始化的 jackson 对象映射器:

class FuelDeserializer(val objectMapper: ObjectMapper) {
inline fun <reified T : Any> deserialize() = object : ResponseDeserializable<T>
{
override fun deserialize(inputStream: InputStream): T? {
return objectMapper.readValue(inputStream)
}

override fun deserialize(reader: Reader): T? {
return objectMapper.readValue(reader)
}

override fun deserialize(bytes: ByteArray): T? {
return objectMapper.readValue(bytes)
}

override fun deserialize(content: String): T? {
return objectMapper.readValue(content)
}
}
}

可以将此类作为Bean添加到您的配置中
@Configuration
class ObjectMapperConfiguration {
@Bean
fun objectMapper(builder: Jackson2ObjectMapperBuilder): ObjectMapper {
val objectMapper = builder.build<ObjectMapper>()
objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false)
objectMapper.findAndRegisterModules()
return objectMapper
}

@Bean
fun fuelDeserializer(objectMapper: ObjectMapper): FuelDeserializer {
return FuelDeserializer(objectMapper)
}
}

用法就是这样
@Controller
class PdfGeneratorApi(
val fuelDeserializer: FuelDeserializer
) {

fun postSomething(): ResponseEntity<?> {
"http://exampl.com"
.httpPost()
.body("Something to post")
.responseObject<MyObject>(fuelDeserializer.deserialize()) {_, _, result ->
when (result) {
is Result.Failure -> logger.warn(result.getException()) { "Failure while posting" }
is Result.Success -> ResponseEntity.ok(result.get())
}
}
}

关于spring - 将Spring的ObjectMapper与Kotlin燃料一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53778137/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com