1. 程式人生 > 其它 >Cannot deserialize instance of `java.lang.String` out of START_OBJECT token

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('儲存失敗') })

這樣就解決了報錯問題,後端控制器也能正常接收引數了。

"後來我才知道,那不是我的花,我只是途徑了它的盛放。"

你要去做一個大人,不要回頭,不要難過。