Gson 读取无法解析对象 Map 字段

Gson reading cannot resolve object Map field

我正在尝试将 json 读入对象。

test.json:

{
  "errorCode": "503",
  "errorMessage": "ERR_MESSAGE",
  "entities": {
    "key1": "value1",
    "key2": "value2"
  }
}

这是我要从 json:

创建的 ErrorDetail 模型
@Getter
@Setter
@ToString
@NoArgsConstructor
@AllArgsConstructor
public class ErrorDetail {
    private String errorCode;
    private String errorMessage;
    private Map<String, List<String>> entities;
    private String errorSource;
}

常用main方法测试解析:

public static void main(String[] args) {
        String json = new String(Files.readAllBytes(Paths.get("src/main/resources/test.json")));
        Gson gson = new Gson();
        ErrorDetail errorDetail = gson.fromJson(json, ErrorDetail.class);
        System.out.println(errorDetail);
}

但是我遇到了异常:

Exception in thread "main" com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_ARRAY but was STRING at line 5 column 14 path $.entities.
    at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:226)
    at com.google.gson.Gson.fromJson(Gson.java:932)
    at com.google.gson.Gson.fromJson(Gson.java:897)
    at com.google.gson.Gson.fromJson(Gson.java:846)
    at com.google.gson.Gson.fromJson(Gson.java:817)
    at com.nordstrom.Main.main(Main.java:28)
Caused by: java.lang.IllegalStateException: Expected BEGIN_ARRAY but was STRING at line 5 column 14 path $.entities.
    at com.google.gson.stream.JsonReader.beginArray(JsonReader.java:351)
    at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.read(CollectionTypeAdapterFactory.java:80)
    at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.read(CollectionTypeAdapterFactory.java:61)
    at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.read(TypeAdapterRuntimeTypeWrapper.java:41)
    at com.google.gson.internal.bind.MapTypeAdapterFactory$Adapter.read(MapTypeAdapterFactory.java:187)
    at com.google.gson.internal.bind.MapTypeAdapterFactory$Adapter.read(MapTypeAdapterFactory.java:145)
    at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.read(ReflectiveTypeAdapterFactory.java:131)
    at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:222)
    ... 5 more

我做错了什么?请帮忙,我整天都在调试和寻找解决方案,但没有结果。

您的型号有误。应该是这样的:

@Getter
@Setter
@ToString
@NoArgsConstructor
@AllArgsConstructor
public class ErrorDetail {
    private String errorCode;
    private String errorMessage;
    // private Map<String, List<String>> entities;
    private Map<String, String> entities;
    private String errorSource;
}