Getting values from JSON using REST client

时间:2017-12-18 07:09:56

标签: spring rest

My api is working fine and I did get back JSON result when tested in POSTMAN. I have problem retrieving the JSON value through a controller using a REST client. I am using spring and hibernate.

@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";

    }

I got this error,

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)

I have also tried this way.

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

but is still not working.

3 个答案:

答案 0 :(得分:0)

You are passing null value in exchange method, actually in place of null you have to pass entity refrence.

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);

答案 1 :(得分: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";

    }

答案 2 :(得分: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




    }