rest - Spring MVC REST 使用 @RequestBody List<?> 返回 HTTP 400 语法错误

标签 rest spring-mvc jackson

我正在使用 Spring 4 + Jackson 2 并在自定义类上使用 @RequestBody 编写了一个功能齐全的 POST 方法。此方法在解码对象方面没有问题。

@ResponseBody
@RequestMapping(value="store", method = RequestMethod.POST)
public ServiceResponse store(@RequestBody CustomClass list) {
    ...
}

// Request: { code: "A", amount: 200 }

当我尝试添加另一种方法来处理同一类的集合时,我的 POST 请求返回以下错误。

HTTP Status 400: The request sent by the client was syntactically incorrect.



我注意到,当提交的 JSON 与实体类不匹配时,通常会发生此错误。然而,我所做的只是提交一个相同对象的数组,而不是对象本身,这已经被证明是有效的。
@ResponseBody
@RequestMapping(value="store-bulk", method = RequestMethod.POST)
public ServiceResponse storeBulk(@RequestBody List<CustomClass> list) {
    ...
}

// Request: [{ code: "A", amount: 200 }, { code: "B", amount: 400 }]

我在这里错过了什么吗?

最佳答案

在 Java 中,泛型的类型信息在运行时会被删除,因此 Spring 会看到您的 List<CustomClass> objectList<Object> object ,因此它无法理解如何解析它。

解决它的方法之一,您可以通过为列表创建包装类来捕获类型信息,如下所示:

public class CustomClassList extends ArrayList<CustomClass> {
}

关于rest - Spring MVC REST 使用 @RequestBody List<?> 返回 HTTP 400 语法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30558491/

相关文章:

java - 如何使用 Jackson 序列化为 java.util.List 和 java.util.Map

rest - Symfony:如何使用 Voryx REST Bundle 创建一对多关系的 POST 请求

java.io.FileNotFoundException :/tmp/(Too many open files)

spring-mvc - SpringMVC异常处理: How to display the parameter being passed in the error page?

java - 使用 Jackson 解析复杂的 JSON 对象

json - 将 JSON 发布到 REST API

wcf - 如何在 wcf rest 服务中添加全局错误处理

http - RESTful Web 服务 - 修改后的日期和带有子项的对象

java - 如何插入换行符作为单元格的数据?

java - Spring Security - 从另一个表获取用户详细信息