You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SpringBoot POST接口String反序列化失败及JPA参数不匹配问题咨询

问题原因与解决方案

初始反序列化报错原因

你遇到的Could not read document: Can not deserialize instance of java.lang.String out of START_OBJECT token报错,核心原因是参数类型不匹配:

  • 你的Controller接口定义了@RequestBody String cifNif,要求接收一个字符串类型的请求体
  • 你在Postman中传入的是JSON对象格式的请求体{"cifNif": "E85882355"},JSON对象开头的{对应Jackson反序列化的START_OBJECT标记,无法直接被反序列化为String类型,因此抛出异常。

对应解决方案(二选一即可)

  1. 调整入参接收逻辑(推荐):用实体类或Map接收JSON对象参数,取出属性后再调用后续逻辑
// 用现有Contrato实体类接收JSON参数
@PostMapping(value = "/recuperaNombreLegalCliente")
public String recuperaNombreLegalCliente(@RequestBody Contrato contrato) {
  // 取出cifNif属性传入service,不要直接传整个实体对象
  return contratoService.getNombreLegalCliente(contrato.getCifNif());
}
  1. 调整Postman传参格式:请求体直接传入纯字符串,Content-Type改为text/plain,不需要套JSON结构
E85882355

修改后新报错原因

你修改代码后出现的类型不匹配报错,是因为你直接把接收到的Contrato实体对象传入了Repository的getNombreLegalCliente方法:

  • Repository的方法要求入参是String类型的cifNif值
  • 你传入的是整个Contrato实体对象,Hibernate执行查询时发现参数类型和预期的String不匹配,因此抛出Parameter value [Contrato [...]] did not match expected type [java.lang.String]异常。

对应解决方案

调用service层方法时,传入Contrato实体的cifNif属性值即可,参考上面第一种解决方案的代码示例即可。

内容的提问来源于stack exchange,提问作者okjfokjrf

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 08:15:02