【发布时间】:2021-05-19 20:28:24
【问题描述】:
我正在尝试解析以下正文:
event=invoice.created&data%5Bid%5D=1757E1D7FD5E410A9C563024250015BF&
data%5Bstatus%5D=pending&data%5Baccount_id%5D=70CA234077134ED0BF2E0E46B0EDC36F&
data%5Bsubscription_id%5D=F4115E5E28AE4CCA941FCCCCCABE9A0A
翻译为:
event = invoice.created
data[id] = 1757E1D7FD5E410A9C563024250015BF
data[status] = pending
data[account_id] = 70CA234077134ED0BF2E0E46B0EDC36F
data[subscription_id] = F4115E5E28AE4CCA941FCCCCCABE9A0A
代码:
@PostMapping(consumes = [MediaType.APPLICATION_FORM_URLENCODED_VALUE])
fun cb(event: SubscriptionRenewed)
{
println(event)
}
data class SubscriptionRenewed(
val event: String,
val data: Data
)
data class Data(
val id: String,
val status: String,
val account_id: String,
val subscription_id: String
)
通常您只需创建传入主体的 POJO 表示,然后 spring a 将其转换为对象。
我了解到我可以将所有参数添加到函数声明中作为 @RequestParam("data[id]") id: String,但这会使事情变得非常冗长。
问题在于解析data[*],如何使其工作的想法?
编辑:
我发现如果我将val data: Data 更改为val data: Map<String, String> = HashMap(),关联数组将正确插入到映射中,如何将其映射到对象的想法?
注意: ID/令牌不是真实的。它们来自文档 sn-p。
【问题讨论】:
-
一个建议:收集为 Map
并使用 json 序列化和反序列化对象可以吗? -
这就是我最终做的事情,但当你想到 spring 如何处理其他输入类型时,感觉就像一个奇怪的样板。
标签: java spring spring-boot spring-mvc kotlin