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

Java Web服务使用GSON解析JSON响应遇语法错误的解决咨询

问题分析与解决

错误原因

  1. 解析类型不匹配:你要解析的JSON是单个对象(外层是{}),但代码里却用List<Response>去接收,Gson期望读到数组的起始标记[,实际却读到对象的起始标记{,因此抛出Expected BEGIN_ARRAY but was BEGIN_OBJECT异常。
  2. 实体类字段与JSON不匹配:你的Response类缺少JSON里的exceptionMessages、trailId、isSuccessful字段,且errors字段和JSON里的validationErrors字段名不一致,导致Gson无法正确映射数据。

修正步骤

1. 修正实体类

更新Response.java,补充缺失字段,并通过@SerializedName注解让字段名和JSON对应(不想改Java字段名时用):

import com.google.gson.annotations.SerializedName;
import java.util.List;

public class Response{
    public Response() {
        super();
    }
    
    private String message;
    // 用注解映射JSON里的validationErrors字段
    @SerializedName("validationErrors")
    private List<ValidationErrors> errors;
    // 新增exceptionMessages字段
    @SerializedName("exceptionMessages")
    private List<ValidationErrors> exceptionMessages;
    private String trailId;
    private boolean isSuccessful;

    // 所有字段的getter和setter,补充新增字段的方法
    public void setMessage(String message) {
        this.message = message;
    }

    public String getMessage() {
        return message;
    }

    public void setErrors(List<ValidationErrors> errors) {
        this.errors = errors;
    }

    public List<ValidationErrors> getErrors() {
        return errors;
    }

    public List<ValidationErrors> getExceptionMessages() {
        return exceptionMessages;
    }

    public void setExceptionMessages(List<ValidationErrors> exceptionMessages) {
        this.exceptionMessages = exceptionMessages;
    }

    public String getTrailId() {
        return trailId;
    }

    public void setTrailId(String trailId) {
        this.trailId = trailId;
    }

    public boolean isSuccessful() {
        return isSuccessful;
    }

    public void setSuccessful(boolean successful) {
        isSuccessful = successful;
    }
}

ValidationErrors.java无需修改,保持原样即可。

2. 修正解析代码

因为JSON是单个对象,直接解析成Response实例,不需要用TypeToken处理列表:

import com.google.gson.Gson;

// 假设response是你的JSON响应字符串
Gson gson = new Gson();
Response responseObj = gson.fromJson(response.toString(), Response.class);

// 通过getter获取对应值
String message = responseObj.getMessage();
List<ValidationErrors> validationErrors = responseObj.getErrors();
boolean isSuccess = responseObj.isSuccessful();

验证

修改完成后,Gson就能正确将JSON映射到Response对象,你可以通过对象的getter方法获取所有字段的值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 13:35:22