【发布时间】:2021-07-21 15:45:21
【问题描述】:
我通过 POST ajax 从前端发送这个:
它由 JSON 数组和对象组成。
编辑:我已经设置:
contentType: 'application/json'
准确的 JSON 发送如下:
{
"alertKeeperDTOs": [
{
"isSelected": true,
"rn": 0,
"keeperId": "B116453993D52735E0530A10CA0A9D27",
"keeperName": "myName"
},
{
"isSelected": false,
"rn": 1,
"keeperId": "65EE22D4A55C4437A4F5552CBFD8D6D0",
"keeperName": "test",
}
],
"deviceId": 4
}
我正在尝试从控制器中获取此信息: (已编辑)
public @ResponseBody String updateDeviceToKeeperList(@RequestBody List<AlertKeeperDTO> alertKeeperDTOs,
@RequestBody Long deviceId, HttpServletRequest request){
....
}
但我收到一个错误(HTTP 400):
已解决 [org.springframework.http.converter.HttpMessageNotReadableException:JSON 解析错误:无法从 START_OBJECT 令牌中反序列化
java.util.ArrayList的实例;嵌套异常是 com.fasterxml.jackson.databind.exc.MismatchedInputException: 无法从 START_OBJECT 令牌中反序列化java.util.ArrayList的实例 在 [来源:(PushbackInputStream);行:1,列:1]]
如何编码我的控制器后端?请帮忙。谢谢。
【问题讨论】:
-
检查
Content-Type请求的标头,您说您正在发送 JSON 正文,但看起来Content-Type是application/x-www-form-urlencoded而不是application/json。另外,如果要将请求正文映射到alertKeeperDTOs,请使用@RequestBody注释而不是@RequestParam -
嗨@MaciejDobrowolski,我已经编辑了我的问题。但仍然有错误。请帮忙。