Json 在Spring数据REST中将值对象序列化为字符串
目前我正在为一个应用程序设计一个域模型。我创建了一个简单的值对象,它基本上只是一个用一些业务逻辑增强的字符串包装器 现在jackson的默认行为是将对象渲染为Json 在Spring数据REST中将值对象序列化为字符串,json,jackson,spring-data-rest,Json,Jackson,Spring Data Rest,目前我正在为一个应用程序设计一个域模型。我创建了一个简单的值对象,它基本上只是一个用一些业务逻辑增强的字符串包装器 现在jackson的默认行为是将对象渲染为 "routerId": { "routerId": "aa:aa:aa:aa:aa:aa" } 为了 我stumbeld accross并试图提供我的定制jackson模块来处理序列化 class NicemediaModule : SimpleModule("NicemediaModule") { override
"routerId": {
"routerId": "aa:aa:aa:aa:aa:aa"
}
为了
我stumbeld accross并试图提供我的定制jackson模块来处理序列化
class NicemediaModule : SimpleModule("NicemediaModule") {
override fun setupModule(context: SetupContext?) {
val serializers = SimpleSerializers()
serializers.addSerializer(RouterId::class.java, RouterIdSerializer())
context?.addSerializers(serializers)
}
}
private class RouterIdSerializer : StdSerializer<RouterId>(RouterId::class.java) {
override fun serialize(value: RouterId?, gen: JsonGenerator?, provider: SerializerProvider?) {
gen?.writeString(value?.routerId)
}
}
但这只会导致
"routerId": {
"content": "aa:aa:aa:aa:aa:aa"
}
有谁能指出我需要做什么才能将RouterId
序列化为一个普通字符串,比如“RouterId”:“aa:aa:aa:aa:aa”
编辑:
我在我的SimpleModule
中添加了@Component
,以便Spring Boot默认加载它,并编写了一个小测试,以查看ObjectMapper
是否工作
@SpringBootTest
@RunWith(SpringRunner::class)
class JsonSerializationTest {
@Autowired
private lateinit var mapper: ObjectMapper
@Test
fun serializeRouterId() {
val routerId: String = "11:11:11:11:11:11"
assertEquals("\"$routerId\"", mapper.writeValueAsString(RouterId(routerId)))
}
}
很好用。这可能表明我的代码一直在工作,但Spring Data REST在某个时候未能序列化我的模型。让
类RouterId
从字符串继承怎么样?尝试实现一个自定义后端IDConverter
SPI,如回答中所建议的那样。工作起来很有魅力 是的,我已经考虑过了。虽然在这种简单的情况下,这可能会解决问题,但如果知道如何使用复杂对象解决这个问题,那就太好了。下一个问题是,String
不是open
;-)
"routerId": {
"content": "aa:aa:aa:aa:aa:aa"
}
@SpringBootTest
@RunWith(SpringRunner::class)
class JsonSerializationTest {
@Autowired
private lateinit var mapper: ObjectMapper
@Test
fun serializeRouterId() {
val routerId: String = "11:11:11:11:11:11"
assertEquals("\"$routerId\"", mapper.writeValueAsString(RouterId(routerId)))
}
}