java - RestTemplate Exchange 与目标 class 作为嵌套映射和列表

java - RestTemplate Exchange with target class as Nested Map and Lists

我有一个 Rest 模板交换以获得服务。服务 returns 响应如下:

响应 1(单个文档):- { "irpage":[{ "drawer": "HPPS", "folderNumber": "HPA00008047642", "docID": "1", "pageNumber": "1", "din": "HPPSHPA00008047642000001", "userKey1": "20151119NJ", "docType": "APPD", "docDate": "20151119", "numberPages": "1", "fileName": "_HPPS151119_Z000\SCHEDL22490010845", "tempFileName": "\\prcins.net\Shared\irtestnjimages01_HPPS151119_Z000\SCHEDL22490010845.pdf", "driver": "", "dateCaptured": "20151119", "timeCaptured": "08:45:04", "singleInd": "S", "userID": "SCHEDL2", "status": "U", "batch": "Z000", "format": "PDF", "media": "D", "orientation": "0", "tempDin": "12201511190845952490845SCHEDL2", "transType": "APPD", "operator": "", "userkey2": "0", "reason": "Computer Generated Document", "archiveStatus": "A", "archiveDate": "20151119", "deviceID": "1", "packageID": "1", "packageType": "15007", "markedInd": "0", "dspPageNumber": "1", "aMedia": "", "aDrive": "", "description": "Output", "folderName": "GAIL BARTLING", "docDescription": "Application Document", "overlayID":空, "docIndex": 空 }] }

响应 2(多个文档): { "irpage":[{ "drawer": "HPPS", "folderNumber": "HPA00008047642", "docID": "1", "pageNumber": "1", "din": "HPPSHPA00008047642000001", "userKey1": "20151119NJ", "docType": "APPD", "docDate": "20151119", "numberPages": "1", "fileName": "_HPPS151119_Z000\SCHEDL22490010845", "tempFileName": "\\prcins.net\Shared\irtestnjimages01_HPPS151119_Z000\SCHEDL22490010845.pdf", "driver": "", "dateCaptured": "20151119", "timeCaptured": "08:45:04", "singleInd": "S", "userID": "SCHEDL2", "status": "U", "batch": "Z000", "format": "PDF", "media": "D", "orientation": "0", "tempDin": "12201511190845952490845SCHEDL2", "transType": "APPD", "operator": "", "userkey2": "0", "reason": "Computer Generated Document", "archiveStatus": "A", "archiveDate": "20151119", "deviceID": "1", "packageID": "1", "packageType": "15007", "markedInd": "0", "dspPageNumber": "1", "aMedia": "", "aDrive": "", "description": "Output", "folderName": "GAIL BARTLING", "docDescription": "Application Document", "overlayID":空, "docIndex": 空 }, { "drawer": "HPPS", "folderNumber": "HPA00008047642", "docID": "4", "pageNumber": "1", "din": "HPPSHPA00008047642000004", "userKey1": "20160104NJ", "docType": "FINA", "docDate": "20160104", "numberPages": "1", "fileName": "_HPPS160105_Z000\SCHEDL28070010819", "tempFileName": "\\prcins.net\Shared\irtestnjimages01_HPPS160105_Z000\SCHEDL28070010819.pdf", "driver": "", "dateCaptured": "20160105", "timeCaptured": "08:19:30", "singleInd": "S", "userID": "SCHEDL2", "status": "U", "batch": "Z000", "format": "PDF", "media": "D", "orientation": "0", "tempDin": "12201601050819308070819SCHEDL2", "transType": "FINA", "operator": "", "userkey2": "0", "reason": "Computer Generated Document", "archiveStatus": "A", "archiveDate": "20160105", "deviceID": "1", "packageID": "4", "packageType": "15007", "markedInd": "0", "dspPageNumber": "1", "aMedia": "", "aDrive": "", "description": "Output", "folderName": "GAIL BARTLING", "docDescription": "Final Notice of Cancellation", "overlayID":空, "docIndex": 空 }] }

当我提供 Class < E > 目标Class 作为 new HashMap< String, List< Map < String , String>>>().getClass() Response2 得到解析,我在 Map 中得到结果,但是 response1(Single Document) 不起作用并且 returns 为空。

或者如果我提供 Class < E > 目标 Class 作为 new HashMap< String , Map < String, String >>().getClass() Response1 得到解析,我在 Map 中得到结果,但是 response2(Multiple Documents) 不起作用并且 returns 为 null .

我不确定如何处理和解析来自服务的两个响应?

responseMap =  restUtils.findDocuments(urlBuilder.build(),new HashMap<String,List<Map<String,String>>>().getClass());


**RestUtils Class:** 
public <E> E findDocuments(String url,Class<E> targetClass) throws JsonProcessingException {

    MultiValueMap<String, String> headers = new LinkedMultiValueMap<String, String>();
    headers.add(ACCEPT, MediaType.APPLICATION_JSON_VALUE);
    headers.add(CONTENT_TYPE,MediaType.APPLICATION_JSON_VALUE);
    //headers.add("id", StringUtils.trimToEmpty(policyNo));
    HttpEntity<Object> requestEntity = new HttpEntity<Object>(headers);
    ResponseEntity<E> response = restTemplate.exchange(url,HttpMethod.GET, requestEntity, targetClass);
    ObjectMapper mapper = new ObjectMapper();
    String jsonResponse = mapper.writeValueAsString(response); 
    System.out.println(jsonResponse);

    return (E) response.getBody();
}

如有任何帮助,我们将不胜感激。

Response1(单个文档):-

{  
 "irpage":[  
  {  
     "drawer":"HPPS",
     "folderNumber":"HPA00008047642",
     "docID":"1",
     "pageNumber":"1",
     "din":"HPPSHPA00008047642000001",
     "userKey1":"20151119NJ",
     "docType":"APPD",
     "docDate":"20151119",
     "numberPages":"1",
     "fileName":"_HPPS151119_Z000\SCHEDL22490010845",
     "tempFileName":"\prcins.net\Shared\irtestnjimages01_HPPS151119_Z000\SCHEDL22490010845.pdf",
     "driver":"",
     "dateCaptured":"20151119",
     "timeCaptured":"08:45:04",
     "singleInd":"S",
     "userID":"SCHEDL2",
     "status":"U",
     "batch":"Z000",
     "format":"PDF",
     "media":"D",
     "orientation":"0",
     "tempDin":"12201511190845952490845SCHEDL2",
     "transType":"APPD",
     "operator":"",
     "userkey2":"0",
     "reason":"Computer Generated Document",
     "archiveStatus":"A",
     "archiveDate":"20151119",
     "deviceID":"1",
     "packageID":"1",
     "packageType":"15007",
     "markedInd":"0",
     "dspPageNumber":"1",
     "aMedia":"",
     "aDrive":"",
     "description":"Output",
     "folderName":"GAIL BARTLING",
     "docDescription":"Application Document",
     "overlayID":null,
     "docIndex":null
  }
 ]
}

Response2(多个文档)

{  
 "irpage":[  
  {  
     "drawer":"HPPS",
     "folderNumber":"HPA00008047642",
     "docID":"1",
     "pageNumber":"1",
     "din":"HPPSHPA00008047642000001",
     "userKey1":"20151119NJ",
     "docType":"APPD",
     "docDate":"20151119",
     "numberPages":"1",
     "fileName":"_HPPS151119_Z000\SCHEDL22490010845",
     "tempFileName":"\prcins.net\Shared\irtestnjimages01_HPPS151119_Z000\SCHEDL22490010845.pdf",
     "driver":"",
     "dateCaptured":"20151119",
     "timeCaptured":"08:45:04",
     "singleInd":"S",
     "userID":"SCHEDL2",
     "status":"U",
     "batch":"Z000",
     "format":"PDF",
     "media":"D",
     "orientation":"0",
     "tempDin":"12201511190845952490845SCHEDL2",
     "transType":"APPD",
     "operator":"",
     "userkey2":"0",
     "reason":"Computer Generated Document",
     "archiveStatus":"A",
     "archiveDate":"20151119",
     "deviceID":"1",
     "packageID":"1",
     "packageType":"15007",
     "markedInd":"0",
     "dspPageNumber":"1",
     "aMedia":"",
     "aDrive":"",
     "description":"Output",
     "folderName":"GAIL BARTLING",
     "docDescription":"Application Document",
     "overlayID":null,
     "docIndex":null
  },
  {  
     "drawer":"HPPS",
     "folderNumber":"HPA00008047642",
     "docID":"4",
     "pageNumber":"1",
     "din":"HPPSHPA00008047642000004",
     "userKey1":"20160104NJ",
     "docType":"FINA",
     "docDate":"20160104",
     "numberPages":"1",
     "fileName":"_HPPS160105_Z000\SCHEDL28070010819",
     "tempFileName":"\prcins.net\Shared\irtestnjimages01_HPPS160105_Z000\SCHEDL28070010819.pdf",
     "driver":"",
     "dateCaptured":"20160105",
     "timeCaptured":"08:19:30",
     "singleInd":"S",
     "userID":"SCHEDL2",
     "status":"U",
     "batch":"Z000",
     "format":"PDF",
     "media":"D",
     "orientation":"0",
     "tempDin":"12201601050819308070819SCHEDL2",
     "transType":"FINA",
     "operator":"",
     "userkey2":"0",
     "reason":"Computer Generated Document",
     "archiveStatus":"A",
     "archiveDate":"20160105",
     "deviceID":"1",
     "packageID":"4",
     "packageType":"15007",
     "markedInd":"0",
     "dspPageNumber":"1",
     "aMedia":"",
     "aDrive":"",
     "description":"Output",
     "folderName":"GAIL BARTLING",
     "docDescription":"Final Notice of Cancellation",
     "overlayID":null,
     "docIndex":null
  }
 ]
}

我会这样解决

        Gson gson = new GsonBuilder().create();
        responseObject = gson.fromJson(jsonString, MyClass.class);

我的班级

public class MyClass {
    List<ArrayEntry> irpage;

    public class ArrayEntry {
        String drawer;
        String folderNumber;
        ...
    }
}

使用您需要的修饰符(public/private)

Gson 的 Maven 依赖项

    <dependency>
        <groupId>com.google.code.gson</groupId>
        <artifactId>gson</artifactId>
        <version>2.4</version>
    </dependency>