我正在使用Spring boot mvc来构建REST服务。 PUT输入数据类似于
@RequestMapping(value = "/cleansing", method = RequestMethod.PUT)
public ResponseEntity<Void> cleanse(@RequestBody List<CategoryItem> data) {
请注意,名称部分是任意的,值部分也是如此。如何使用spring的自动转换转换它?我的代码就像
@RequestBody List<CategoryItem> data
我知道angular-material
部分不对,我不知道如何编写CategoryItem类以使其工作。什么是正确的选择?
答案 0 :(得分:2)
您希望它是什么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());
}
}
}
就像我说的那样......有点笨重。
更灵活的方法是使用杰克逊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 {
//...
}
然后在控制器方法中使用它:
@RequestMapping(value = "/cleansing", method = RequestMethod.PUT)
public ResponseEntity<Void> cleanse(@RequestBody MyClass data) {
//...
}