Cannot deserialize instance of `java.lang.String` out of START_OBJECT token
阿新 • • 發佈:2021-11-13
前端請求進入後端控制器報錯【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('儲存失敗') })
這樣就解決了報錯問題,後端控制器也能正常接收引數了。
"後來我才知道,那不是我的花,我只是途徑了它的盛放。"
你要去做一個大人,不要回頭,不要難過。