![](/img/trans.png)
[英]How to send body in restTemplate as application/x-www-form-urlencoded
[英]How to parse a application/x-www-form-urlencoded with an associative array?
我正在尝试解析以下正文:
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 将其转换为 object。
我了解到我可以将所有参数添加到 function 声明中作为@RequestParam("data[id]") id: String
,但这会使事情变得非常冗长。
问题在于解析data[*]
,如何使其工作的想法?
编辑:我发现如果我将val data: Data
更改为val data: Map<String, String> = HashMap()
,关联数组将正确插入到 map 中,关于如何将 map 改为 ZA8CFDE6331BD4BEB6666C9 的想法
注意: ID/令牌不是真实的。 它们来自文档片段。
Map<String, String>
ObjectMapper
或Gson
)序列化上一步构建的Map
static class Data {
private String one;
private String a;
@Override
public String toString() {
return "Data{one=" + one + ", a=" + a + "}";
}
}
public static void main(String[] args) {
String input = "{\"one\":1, \"a\":\"B\"}";
Gson gson = new GsonBuilder().create();
Map<String, String> map = gson.fromJson(input, new TypeToken<Map<String, String>>(){}.getType());
Data data = gson.fromJson(gson.toJson(map), Data.class);
System.out.println(data);
}
这肯定是一个关于方法的回合,我不知道有任何优化
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.