当前位置: 首页 > 知识库问答 >
问题:

RestTemplate中ResponseEntity的问题

秦昂然
2023-03-14

我有两个微服务,比如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请求的Microservice 2,结果就会像预期的那样开始。

我做错了什么?事先谢谢你的帮助。

共有1个答案

杜俭
2023-03-14

我以前也遇到过这个问题。

java和开发人员之间的空间可能会产生问题,所以在继续之前对其进行解码。

 类似资料:
  • 我正在构建两个微服务,它们应该互相对话。我正在使用尤里卡作为服务注册表。 微服务1-microservice1.java Microservice2将从Microservice1获取数据的Microservice2 MicroService2Controller.java microService2ResponseWrapper.java-这是通用包装器 当我运行Microservice1:htt

  • 我创建了一个GET服务来重定向到使用POST的网页。我正在尝试使用,因为有了它,我可以发送请求服务的正文和标头,并且我已经实现了从服务中获取我需要的信息。 然而,我需要重定向到具有POST服务的服务器,但我不能,因为我不知道如何设置状态代码,我将其重定向到另一台服务器。 这些是我正在使用的函数:

  • 当从其中一个web服务获取数据时,引号(“)将显示为(?)当我使用Rest模板时。我在chrome上的postman中测试了web服务,并给出了正确的字符。我尝试编码UTF-8,但没有成功。 我检查了以下是从Web服务提供商编码: 高速缓存控制→私有连接→关闭内容编码→gzip内容长度→3407内容类型→text/xml; charset=ISO-8859-1日期→周三,2015 13:35:53

  • 该应用程序没有针对/error的显式映射,因此您将其视为一种后退。 美国东部时间2017年12月11日上午10:19:54出现意外错误(类型=不可接受,状态=406)。找不到可接受的表示

  • 我使用基于xml的配置-http出站网关trii=gger一个rest服务,响应是ResponseEntity,我不知道该服务的详细信息。我收到的输出应该放在JMS队列中。 我如何更新下面的内容以只提取响应实体的主体并传递到输出通道?如果有变压器,请举例说明。是否可以使用config? 错误:org.springframework.messaging.MessageHandlingExceptio

  • 我试图使用restTemplate.exchange()方法解析来自服务的JSON响应。但由于解析错误而失败。 Java代码 JSON对象Java类 错误: 2018-07-12 15:40:00.876错误6044--[nio-8080-exec-1]O.A.C.C.C.[.[/].[dispatcherServlet]:路径为[]的上下文中servlet[dispatcherServlet]的