【问题标题】:HTTP Requst in the POST Method from one service to another service+SpringBoot REST APIPOST方法中的HTTP请求从一个服务到另一个服务+Spring Boot REST API
【发布时间】:2020-06-30 15:41:23
【问题描述】:

我使用了 SpringBoot REST API 微服务。 我有玩家、游戏和得分等三个微服务。 在 score 微服务的 POST 方法中,我想向播放器微服务发送 HTTP 请求,以通过昵称获取播放器对象。 我读过一些关于 RestTemplate 的东西,但是当我使用这个时:

final String uri = "http://localhost:8080/player";
    RestTemplate restTemplate = new RestTemplate();
    Player player = restTemplate.getForObject(uri, Player.class);

我有一个错误,因为我的服务在不同的目录和分数服务里面,它不知道 Player Class。 我不知道如何从一个 Rest 服务向另一个服务发出 HTTP 请求。 评分服务中的评分控制器:

   @RestController
@RequestMapping("/score")
public class ScoreController {
    @Autowired
    private ScoreRepository repo;
    
    //POST Score
    @PostMapping
    public ResponseEntity<?> createScore(@RequestBody @JsonView(Views.class) @Valid  Score score) {
        final String uri = "http://localhost:8080/player";
        RestTemplate restTemplate = new RestTemplate();
        Player player =restTemplate.getForObject(uri, Player.class);
        
        
        return null;}

}

【问题讨论】:

  • 它抛出了什么错误?仅使用 restTemplates 调用服务。只需验证其他服务器是否已启动并运行,即您是否真的能够从 Postman 等处点击“localhost:8080/player”。另外,您的其他 API 是否需要 GET 调用?
  • 在 responseType 中,您必须提供一个类,您期望其对象作为来自被调用 API 的响应。
  • @SanketSingh 抱歉我删除了,因为我在第一个表单中再次使用,我看到在我的服务中创建播放器类时出错。但我有 Player 类但在另一个服务中
  • 如果错误仍然出现,您可以添加有用的代码,以便我了解发生了什么或至少错误。
  • @SanketSingh 好的,我做到了。 Player player =restTemplate.getForObject(uri, Player.class);但它要求我在此服务中定义 Player Class

标签: spring spring-boot httprequest microservices


【解决方案1】:

如果您尝试从 Score 微服务中调用 Player 微服务的 API,您可以在 Score 微服务中创建一个新的 Player 类,该类应该与 Player 微服务中的 Player 类具有相同的实例变量。

对于微服务间通信,您可以在两个微服务中创建相同 DTO 类的副本——一个用于请求,另一个用于响应。

其他选项是为微服务创建一个共享库并共享 DTO 类或使用客户端库。

【讨论】:

  • 第一个,我不感兴趣。请给我分享第二个建议的链接
  • 请参考link
猜你喜欢
  • 2017-07-10
  • 1970-01-01
  • 2018-05-22
  • 2017-09-07
  • 2012-05-10
  • 2011-06-01
  • 2022-01-15
  • 2019-11-19
  • 1970-01-01
相关资源
最近更新 更多