gpt4 book ai didi

spring - 如何将任意名称值对列表从@RequestBody映射到java对象

转载 作者:行者123 更新时间:2023-12-01 23:59:35 27 4
gpt4 key购买 nike

我正在使用 Spring boot mvc 构建 REST 服务。 PUT 输入数据就像

[
{
"PERSON":"John"
},
{
"PLACE":"DC"
},
{
"PERSON":"John"
},
{
"PERSON":"Joe"
},
{
"RANDOM NAME 011":"random string"
},
{
"OTHER RANDOM NAME":"John"
}
]

请注意,名称部分是任意的,值部分也是任意的。如何利用spring的自动转换来转换呢?我的代码就像

@RequestMapping(value = "/cleansing", method = RequestMethod.PUT)
public ResponseEntity<Void> cleanse(@RequestBody List<CategoryItem> data) {

我知道@RequestBody List<CategoryItem> data部分不正确,我不知道如何编写 CategoryItem 类以使其工作。什么是正确的选择?

最佳答案

什么Object你想要这样吗?

由于 HTTP PUT 有效负载,您的签名将用作 List<Map<String, String>> ,但说实话,这有点笨拙。考虑到您的 key 是随机的,检索值会特别麻烦。像这样的东西可以用于处理整组数据:

@RequestMapping(value = "/cleansing", method = RequestMethod.PUT)
public ResponseEntity<Void> cleanse(@RequestBody List<Map<String, String>> data) {
for(final Map<String, String> map : data) {
for(final Map.Entry<String, String> e : map.entrySet()) {
System.out.println("Key: " + e.getKey() + " :: Value: " + e.getValue());
}
}
}

就像我说的......有点笨拙。

更灵活的方法是使用 Jackson JsonDeserializer ,以及自定义类:

public class MyClassDeserializer extends JsonDeserializer<MyClass> {
public abstract MyClass deserialize(JsonParser p, DeserializationContext ctxt) throws IOException, JsonProcessingException {
//...
}
}

@JsonDeserialize(using=MyClassDeserializer.class)
public class MyClass {
//...
}

然后在 Controller 方法中使用它:

@RequestMapping(value = "/cleansing", method = RequestMethod.PUT)
public ResponseEntity<Void> cleanse(@RequestBody MyClass data) {
//...
}

关于spring - 如何将任意名称值对列表从@RequestBody映射到java对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37221171/

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