2017-12-18 97 views
1

我的api工作正常,並且在POSTMAN中測試時確實返回了JSON結果。我有問題通過使用REST客戶端的控制器檢索JSON值。我正在使用spring和hibernate。使用REST客戶端從JSON獲取值

@RequestMapping(value = "/viewForm/{id}") 
    public String viewForm(@Valid @PathVariable("id") String id, Model model) { 

     RestTemplate restTemplate = new RestTemplate(); 

     String fooResourceUrl 
      = "http://localhost:8080/api/delivery/searchDanceform/"+ id; 

     System.out.println(fooResourceUrl); 

     ResponseEntity<DanceApplicationForm> rateResponse = 
       restTemplate.exchange(fooResourceUrl, 
          HttpMethod.GET, null, DanceApplicationForm.class); 
     DanceApplicationForm response = rateResponse.getBody(); 

     System.out.println(response); 
     logger.info("result = {}", response); 

     return VIEW_PATH + "dance-profile"; 

    } 

我得到這個錯誤,

SEVERE: Servlet.service() for servlet [dispatcher] in context with path [/intranet-web] threw exception [Request processing failed; nested exception is org.springframework.web.client.HttpClientErrorException: 404 null] with root cause 
org.springframework.web.client.HttpClientErrorException: 404 null 
    at org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:78) 
    at org.springframework.web.client.RestTemplate.handleResponse(RestTemplate.java:700) 
    at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:653) 
    at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:613) 
    at org.springframework.web.client.RestTemplate.exchange(RestTemplate.java:531) 
    at sg.com.ctc.intranet.web.training.controller.DanceController.viewDanceApplicationForm(DanceController.java:239) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 

我自己也嘗試這種方式。

String response = restTemplate.getForObject(fooResourceUrl, String.class); 

但仍然無法正常工作。

+0

你調用這個URL裏面viewForm控制器的 「http://本地主機:8080/API /交付/ searchDanceform /」 + ID;在你的答案部分你的控制器名稱是viewDanceApplication,它與調用URL不匹配,這意味着控制器名稱必須與searchDanceform相匹配 –

+0

我可以使用REST客戶端在我的rest控制器中調用API方法。因此,我認爲API鏈接和控制器名稱不必相同。 – Learner

回答

0

你正在通過null值交換的方法,實際上代替null你必須通過實體引用。

HttpHeaders headers = new HttpHeaders(); 
headers.set("Accept", "application/json"); 
HttpEntity entity = new HttpEntity(headers); 
ResponseEntity<DanceApplicationForm> rateResponse = restTemplate.exchange(url, HttpMethod.GET, entity, DanceApplicationForm.class); 
+0

我試過了你的建議,但我仍然得到同樣的錯誤。有沒有其他方法可以解決這個問題? – Learner

+0

你可以在交換方法中共享調用url的控制器代碼,因爲錯誤是「404」,這基本上是找不到頁面或url路徑不正確。 –

+0

我有我的控制器在答案部分,因爲我不太確定我應該把它放在哪裏。請看看。非常感謝! – Learner

0

我把它放在答案部分,因爲我不太確定我可以在哪裏回覆我的代碼。

@RequestMapping(value = "/viewDanceApplication/{id}") 
    public String viewDanceApplicationForm(@Valid @PathVariable("id") String id, Model model) { 

     RestTemplate restTemplate = new RestTemplate(); 

     String fooResourceUrl 
      = "http://localhost:8080/api/delivery/searchDanceform/"+ id; 

     HttpHeaders headers = new HttpHeaders(); 
     headers.set("Accept", "application/json"); 
     HttpEntity entity = new HttpEntity(headers); 
     ResponseEntity<DanceApplicationForm> rateResponse = restTemplate.exchange(fooResourceUrl, HttpMethod.GET, entity, DanceApplicationForm.class); 

    logger.info("result = {}", rateResponse); 



    model.addAttribute("showProfile",rateResponse); 

return VIEW_PATH + "dance-profile"; 

    } 
0

這是

處理程序控制器
http://localhost:8080/api/delivery/searchDanceform/ 

@RequestMapping(value = "/searchDanceform/{id}") 
    public String searchDanceform(@Valid @PathVariable("id") String id, Model model) { 
      // do your code and return response 




    }