Gson 问题:无法将 List<String> 响应映射到 Pojo class

Gson Issue : Cannot map List<String> response to the Pojo class

我有一个基于微服务的架构。我的一项服务调用另一项服务 api,并且大多数情况下我们共享响应 class 对象,这使得使用 gson.fromJson 方法映射变得容易。

现在,我遇到的问题是,从其中一个微服务 api,我在父服务中得到的响应是 List<String> 类型的。父服务响应 pojo class 格式如下:

public class ParentResposneClass {
        private List<String> list;
        //getter-setter etc
}

父api调用代码如下(删除了不必要的部分):

CloseableHttpResponse response = closeableHttpClient.execute(postRequest);
String jsonResponse = EntityUtils.toString(response.getEntity(),StandardCharsets.UTF_8.name());
Logger.info(jsonResponse); // ["first","second"]

现在,如果我想将 json 响应映射到我的 pojo 响应 class ParentResposneClass :

gson.fromJson(jsonResponse, ParentResposneClass.class);

我收到错误:com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 2

而且道理好像也可以理解。但我的问题是,是否可以用这种方法解决上述问题。

如果我不采用 gson 方式,而是直接在 ParentResposneClass 中设置列​​表对象:

ParentResposneClass parentResposneClass = new ParentResposneClass();
parentResposneClass.setList(convertStringToList(jsonResponse)); 
System.out.println(parentResposneClass.getList());

public static List<String> convertStringToList(String str) {
        str = str..replaceAll("\[", "").replaceAll("\]", ""));
        List<String> list = new ArrayList<String>(Arrays.asList(commaSepString.split("\s*,\s*")));
        return list;
}

这将响应 (parentResposneClass.getList()) 作为 "tag": ["\"first\"","\"second\""] 所有这些转义显示 json 编码字符串仍被保留。

那么,有没有一个好的方法可以解决这个转义字符问题,而不是直接从字符串中替换这些字符。

PS :我知道这是一个设计问题,两个微服务应该共享相同的响应 classes。但是鉴于这种情况,有没有办法解决 Problem 1Problem 2

对于问题 1 我会去:

var list = gson.fromJson(jsonResponse, new TypeToken<List<String>>(){}.getType())
var prc = new ParentResponseClass()
prc.setList(list);

我曾经尝试过类似的东西。

列表结果 = gson.fromJson(jsonResponse, List.class);

ParentResposneClass parentResposneClass = new ParentResposneClass(); parentResposneClass.setList(结果);