jay*_*y.m 5 spring spring-mvc spring-boot
我正在使用 Spring boot mvc 构建 REST 服务。PUT 输入数据就像
[
{
"PERSON":"John"
},
{
"PLACE":"DC"
},
{
"PERSON":"John"
},
{
"PERSON":"Joe"
},
{
"RANDOM NAME 011":"random string"
},
{
"OTHER RANDOM NAME":"John"
}
]
Run Code Online (Sandbox Code Playgroud)
请注意,名称部分是任意的,值部分也是任意的。如何利用spring的自动转换来转换呢?我的代码就像
@RequestMapping(value = "/cleansing", method = RequestMethod.PUT)
public ResponseEntity<Void> cleanse(@RequestBody List<CategoryItem> data) {
Run Code Online (Sandbox Code Playgroud)
我知道@RequestBody List<CategoryItem> data部分不正确,我不知道如何编写 CategoryItem 类以使其工作。什么是正确的选择?
Object你想要什么?
由于 HTTP PUT 有效负载是,您的签名将作为List<Map<String, String>>,但说实话有点笨拙。考虑到您的密钥是随机的,检索值会特别麻烦。像这样的东西可以用于处理整组数据:
@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());
}
}
}
Run Code Online (Sandbox Code Playgroud)
就像我说的……有点笨拙。
更灵活的方法是使用 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 {
//...
}
Run Code Online (Sandbox Code Playgroud)
然后在您的控制器方法中使用它:
@RequestMapping(value = "/cleansing", method = RequestMethod.PUT)
public ResponseEntity<Void> cleanse(@RequestBody MyClass data) {
//...
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4260 次 |
| 最近记录: |