java - 如何在spring boot中反序列化数组对象
问题描述
我的问题很简单,我有一个 spring boot 控制器,它可以像这样接收一组对象:
@RequestMapping(value = "/contracts/{id}/milestones", method = RequestMethod.PUT, headers = "Accept=application/json")
@ResponseBody
@Transactional
public ResponseEntity<?> updateContractMilestones(@PathVariable("id") String contractId,
@DTO(MilestoneUpdateStateDto.class) List<Milestone> milestones,UriComponentsBuilder uriComponentsBuilder, final HttpServletRequest request) {
}
但是当我发送以下 Json 对象时:
[{"id":18,"state":"FINALIZED"},{"id":19,"state":"FINALIZED"}]
我收到以下错误:
无法读取 HTTP 消息:org.springframework.http.converter.HttpMessageNotReadableException:JSON 解析错误:无法反序列化
com.espiritware.opusclick.dto.MilestoneUpdateStateDto
超出 START_ARRAY 令牌的实例;嵌套异常是 com.fasterxml.jackson.databind.exc.MismatchedInputException:无法反序列com.espiritware.opusclick.dto.MilestoneUpdateStateDto
化 START_ARRAY 标记的实例
我的问题是我应该从后端做些什么才能没有错误地接收这个对象?
非常感谢!
解决方案
将您的方法签名更新为
@RequestMapping(value = "/contracts/{id}/milestones", method = RequestMethod.PUT, headers = "Accept=application/json")
@ResponseBody
@Transactional
public ResponseEntity<?> updateContractMilestones(
@PathVariable("id") String contractId,
List<MilestoneUpdateStateDto> milestones,
...
)
并尝试使用此 JSON
{
[
{"id":18, "state":"FINALIZED"},
{"id":19, "state":"FINALIZED"}
]
}
推荐阅读
- javascript - 将值从 JavaScript 传递到 Django view.py
- angular - Angular ui路由器设置页面标题
- python - 使用 np.maximum 函数时 Spyder 内核崩溃并重新启动
- javascript - 使用参数使用 Javascript 更改 CSS 属性
- python - 为什么我会收到 Sqlite3 的数据类型 TEXT 错误?
- visual-studio-code - Visual Studio Code:如何在视图容器中创建菜单
- ios - SwiftUI 状态在我的应用程序中根本不起作用
- node.js - 第一次成功查询heroku postgres表后,每次查询都失败
- python - 如何在python中找到素数
- javascript - 如何进行并行异步/等待 api 标注