我正在尝试使用RestTemplate
调用get请求。我尝试如下所示,但出现错误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;
}
答案 0 :(得分:0)
restTemplate.getForObject(String url,Class responseType,Object ... uriVariables)应该在您的String url中处理诸如{myVar}之类的uri变量。
如果要设置查询参数,请考虑使用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解决方案。
答案 1 :(得分:0)
您可以作为解决方案1 手动构建url,也可以将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();
}