首页 > 解决方案 > 类 java.util.LinkedHashMap 不能转换为类 java.lang.String(java.util.LinkedHashMap 和 java.lang.String

问题描述

我正在使用以下代码从 Rest API 获取记录...

HttpEntity<MultiValueMap<String, String>> entity = new HttpEntity<>(bimap, headers);
    ResponseEntity<List> response = null;
    try {
        response = restTemplate.exchange("http://localhost:8080/dsperson/getallmatching",
                                  HttpMethod.POST,
                                  entity,
                                  List.class);
        dsPersonHits = response.getBody();
    } catch (RestClientException e) {
        // TODO Auto-generated catch block
        System.out.println("getMatches exception:" + e.getLocalizedMessage());
        e.printStackTrace();
    }
    System.out.println("getMatches response:" + response);
    return dsPersonHits;

这是日志。它似乎可以获取 JSON 列表,但是当我尝试获取 json 以构建 DSPerson 对象列表时,我得到了以下信息。

getMatches response:<200,[{id=1, userName=, title=Mr., firstName=Abel, middleName=, lastName=Baker, suffix=, alias=HITMAN , birthday=, philSysNumber=PSN:12345, dataSource=BI, criminalCaseNumber=, caseDescription=invalid visa, caseStatus=Settled}, {id=2, userName=, title=Ms., firstName=Alice, middleName=, lastName=Baker, suffix=, alias=Alice , birthday=, philSysNumber=PSN:12346, dataSource=BI, criminalCaseNumber=, caseDescription=invalid visa, caseStatus=Settled}, {id=3, userName=, title=Mr., firstName=Abrahim, middleName=, lastName=Balous, suffix=, alias=Abe, birthday=, philSysNumber=, dataSource=DOJ, criminalCaseNumber=CCN:123456, caseDescription=Murder, caseStatus=Convicted}],[Content-Type:"application/json", Transfer-Encoding:"chunked", Date:"Mon, 18 Jan 2021 09:30:26 GMT", Keep-Alive:"timeout=60", Connection:"keep-alive"]>

收到异常:类 java.util.LinkedHashMap 无法转换为类 java.lang.String(java.util.LinkedHashMap 和 java.lang.String 位于加载程序“bootstrap”的模块 java.base 中)java.lang.ClassCastException:类java.util.LinkedHashMap 无法转换为 gov.doj.indisearch.datasource.listener 的类 java.lang.String(java.util.LinkedHashMap 和 java.lang.String 位于加载程序“bootstrap”的模块 java.base 中)。 JmsConsumer.onMessage(JmsConsumer.java:62)

如何在响应中获取 JSON?

标签: javajsonspringspring-boot

解决方案


您需要序列化响应。有许多库可以帮助您完成这项工作,例如 Jackson 或 Gson。

在杰克逊你可能会这样做:

ObjectMapper mapper = new ObjectMapper();
String json = mapper.writeValueAsString(serializableObject);

在 Gson 中,您可能会这样做:

Gson gson = new Gson();
String json = gson.toJson(serializableObject);

推荐阅读