Cannot deserialize instance of `java.lang.String` out of START_OBJECT token

前端请求进入后端控制器报错【Cannot deserialize instance of `java.lang.String` out of START_OBJECT token】,从错误信息上看是json解析错误,对比下前端请求发送内容和后端控制器接收参数即可发现问题。

前端发送内容:

api_save(JSON.stringify({
  po: this.form
})).then(response => {
  if (response.code === 200) {
    this.$message.success('保存成功')
    this.$emit('saved')
  }
}).catch(() => {
  this.$message.error('保存失败')
})

后端控制器接收参数:

@PostMapping("/save")
public Return<?> save(@RequestBody Map<String, String> paramMap) {
    try {
        service.save(JSON.parseObject(paramMap.get("po"), ProgEbs.class));
    } catch (Exception e) {
        e.printStackTrace();
    }
    return Return.success("保存成功");
}

对比后发现前端发送请求是对象,而后端控制器接收参数是字符串,因此在控制器后端进行json解析错误了,这时候只要把前端发送请求内容调整成json字符串或者后端控制器接收参数调整为Object对象即可。

这里使用的前者:

api_save(JSON.stringify({
  po: JSON.stringify(this.form)
})).then(response => {
  if (response.code === 200) {
    this.$message.success('保存成功')
    this.$emit('saved')
  }
}).catch(() => {
  this.$message.error('保存失败')
})

这样就解决了报错问题,后端控制器也能正常接收参数了。

 

"后来我才知道,那不是我的花,我只是途径了它的盛放。"

上一篇:记录bug:web项目中出现500项目 java.lang.NoClassDefFoundError: org/apache/commons/dbutils/ResultSetHandler


下一篇:2021-11-11