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('保存失败') })
这样就解决了报错问题,后端控制器也能正常接收参数了。
"后来我才知道,那不是我的花,我只是途径了它的盛放。"
你要去做一个大人,不要回头,不要难过。