我有一个基于微服务的架构,我的一个服务调用另一个服务API,并且我们大多数时候共享响应类对象,这使得使用gson.fromJson
方法Map变得容易。
现在,我遇到的问题是,从一个微服务API中,我在父服务中得到的响应类型为List<String>
。父服务响应pojo类的格式如下:
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"]
*问题1
现在,如果我想将jsonResponseMap到我的pojo响应类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
而道理似乎是可以理解的。但我的问题是,用这种方法有没有可能解决上述问题。
*问题2
如果我不按照gson
的方法,而是直接在ParentResposneClass
中设置list对象:
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:我知道这是一个设计问题,两个微服务应该共享相同的响应类。
2条答案
按热度按时间vwoqyblh1#
对于问题1,我会说:
j5fpnvbx2#
我以前也试过类似的方法。
列表结果= gson.fromJson(jsonResponse,列表.类);
().如果是,则返回(结果);