Spring RestTemplate: BadRequest 400, null.во время звонка Получить запрос - PullRequest
0 голосов
/ 08 мая 2019

Я пытаюсь позвонить получить запрос, используя RestTemplate.Я пытался, как показано ниже, но я получаю ошибку HttpClientErrorException$BadRequest: 400 null.

Может кто-нибудь сказать мне, что я делаю неправильно при вызове Get Request с параметрами?

@GetMapping("/getDepartmentInstitute")
public Integer getDeptInstByUserIDAndInstId(@RequestParam Integer nUserId,
                                            @RequestParam Integer  nDeptInst) {
return permissionsService.findDeptInstByUserIdAndInstId(nUserId,nDeptInst );        
}

Я пытался вот так

public Integer findAlertDetails(Integer nUserId, Integer nInstId) {                 

    String uri="http://localhost:8064/spacestudy/" +instituteIdentifier +"/communication/alertmanagement/getDepartmentInstitute?nUserId="+ nUserId+"&nInstId="+nInstId+"";

        RestTemplate restTemplate = new RestTemplate();

       Integer nInstTo=restTemplate.getForObject(uri,Integer.class,nUserId,nInstId);

            System.out.println(nInstTo);    

        return nInstTo;
    }

Ответы [ 2 ]

0 голосов
/ 09 мая 2019

Вы можете создать URL вручную как Решение 1 или использовать UriComponentsBuilder как Решение 2

Решение 1

public Integer findAlertDetails(Integer nUserId, Integer nInstId) {

            String uri="http://localhost:8064/spacestudy/" +instituteIdentifier +"/communication/alertmanagement/getDepartmentInstitute?nUserId="+nUserId+"&nDeptInst="+nInstId;

            RestTemplate restTemplate = new RestTemplate();
            Integer nInstTo=restTemplate.getForObject(uri,Integer.class);

            System.out.println(nInstTo);

            return nInstTo;
        }

Решение 2

public Integer findAlertDetails(Integer nUserId, Integer nInstId) {
        String uri="http://localhost:8064/spacestudy/" +instituteIdentifier +"/communication/alertmanagement/getDepartmentInstitute";

        RestTemplate  restTemplate = new RestTemplate();
        HttpHeaders httpHeaders = new HttpHeaders();
        httpHeaders.add("Content-Type", "application/json");
        UriComponentsBuilder uriBuilder = UriComponentsBuilder.fromHttpUrl(uri)
                .queryParam("nUserId", nUserId)
                .queryParam("nDeptInst", nInstId);

        HttpEntity<Integer> requestEntity = new HttpEntity<>(httpHeaders);

        ResponseEntity<Integer> responseEntity = restTemplate.exchange(
                uriBuilder.toUriString(),
                HttpMethod.GET,
                requestEntity,
                Integer.class
        );


        return requestEntity.getBody();
    }
0 голосов
/ 08 мая 2019

restTemplate.getForObject (String url, Class responseType, Object ... uriVariables) должен иметь дело с переменными uri, такими как {myVar} в вашем String url.

Если вы хотите установить параметры запроса, рассмотритеиспользуя UriComponentsBuilder.

URI uri = UriComponentsBuilder.fromHttpUrl("http://localhost:8064/spacestudy/" +instituteIdentifier +"/communication/alertmanagement/getDepartmentInstitute")
              .queryParam("nUserId", nUserId)
              .queryParam("nDeptInst", nInstId)
              .build().toUri();

Integer nInstTo = restTemplate.getForObject(uri,Integer.class);

Или вы можете установить их вручную следующим образом:

String uri = "http://localhost:8064/spacestudy/" +instituteIdentifier +"/communication/alertmanagement/getDepartmentInstitute"
                   + "?nUserId=" + nUserId + "&nDeptInst=" + nInstId;

Я предпочитаю решение UriComponentsBuilder.

...