spring - RestTemplate 中的 ResponseEntity 问题
问题描述
我有两个微服务,比如 Microservice1 使用 RestTemplate 调用 Microservice2。
Microservice2 上的处理方法是这样的。
@GetMapping("/careerRoles")
public ResponseEntity<Map<String, Object>> getRole(@RequestParam(value =
"roleName", required = false) String roleName,
@RequestParam(value = "domain", required = false) String domain,
@RequestParam("proficiencyLevel") String proficiencyLevel,
@RequestParam(value = "page", required = false) Integer page,
@RequestParam(value = "limit", required = false) Integer limit) {
Map<String, Object> query = new HashMap<>();
Map<String, Object> json = new HashMap<>();
if (page == null && limit == null) {
page = 1;
limit = 10;
}
query.put("page", page);
query.put("limit", limit);
List<Role> roles = new ArrayList<>();
try {
if (roleName == null) {
query.put("proficiencyLevel", proficiencyLevel);
roles = this.roleService.getRolesByProficiencyLevel(proficiencyLevel, page, limit);
} else {
query.put("proficiencyLevel", proficiencyLevel);
query.put("roles", roleName);
roles = this.roleService.getRolesByNameAndProficiencyLevel(roleName, proficiencyLevel, page, limit);
}
json.put("error", null);
json.put("query", query);
json.put("result", roles);
return new ResponseEntity<Map<String, Object>>(json, HttpStatus.OK);
} catch (RoleNotFoundException e) {
json.put("error", e.getMessage());
json.put("query", query);
json.put("result", roles);
return new ResponseEntity<Map<String, Object>>(json, HttpStatus.NOT_FOUND);
}
}
Microservice1 中的调用代码是这样的。
@GetMapping("careerRole")
public ResponseEntity<Map<String,Object>> getCareerRole(
@RequestParam(value = "roleName", required = false) String roleName,
@RequestParam(value = "domain", required = false) String domain,
@RequestParam("proficiencyLevel") String proficiencyLevel,
@RequestParam(value = "page", required = false) Integer page,
@RequestParam(value = "limit", required = false) Integer limit) {
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
HttpEntity<String> entity = new HttpEntity<String>("Hello World!",
headers);
UriComponentsBuilder builder = UriComponentsBuilder
.fromUriString(uri)
// Add query parameter
.queryParam("roleName",roleName)
.queryParam("proficiencyLevel", proficiencyLevel);
Map<String,Object> map = restTemplate.getForObject(builder.toUriString(),
Map.class);
return new ResponseEntity<Map<String,Object>>(map,HttpStatus.OK);
}
}
当我将它发送到监听端口 8081 的 Microservice1 时,代码正在运行并按预期返回 JSON
http://localhost:8081/api/v1/careerRoles?proficiencyLevel=Novice
但是,如果我这样发送两个请求参数,代码就会失败。
http://localhost:8081/api/v1/careerRoles?roleName=Java Developer&proficiencyLevel=Novice
但是,如果我使用 Postman 通过前面的两个 GET 请求直接访问微服务 2,结果将按预期出现。
我做错了什么?提前感谢您的帮助。
解决方案
我以前遇到过这个问题。
java 和开发人员之间的空间可能会产生问题,因此请在继续之前对其进行解码。
推荐阅读
- java - java中如何传值?
- php - WooCommerce 类别中的附加图像字段
- postgresql - jsonb访问数组元素
- selenium - Jmeter - 从外部文件发送正文数据时响应正文出错
- sql - SQL 中 MIN_BY 的等效表达式?
- git - 尝试同步时,从 Master Repo 中删除 Fork Repo 中的文件夹会导致冲突
- sql - Laravel Eloquent - 仅返回唯一值并忽略所有多次出现的值
- javascript - 未触发 Javascript
- c# - ASP.NET Core Ajax 返回 null
- python - 使用 multiprocessing.Process 在 Python 中并行运行函数