如何在spring boot中从同一个应用程序调用另一个api

Posted

技术标签:

【中文标题】如何在spring boot中从同一个应用程序调用另一个api【英文标题】:How to call another api from same app in spring boot 【发布时间】:2017-10-27 07:05:37 【问题描述】:

我有两个RestControllers 用户和公司。

CompanyController:使用服务和回购级别从companies 表中获取并存储公司信息。

UsersController :用于获取和存储用户。

关系:每个用户都与公司相关联(用户有一家公司)。

当新的User注册时,我们需要通过id获取公司信息并与用户资料相关联。

为此,我在CompanyController 中有一个端点,名为getCompanyInfo。我必须在保存用户资料的同时调用该端点来获取公司数据。

如何在 Spring Boot 中从同一个应用调用另一个 API?

【问题讨论】:

为什么不直接调用公司服务(如果两个控制器都存在于同一个应用程序中)?这将比调用公司控制器更快。 因为我也在公司控制器上做一些计算。我不想丢失或重写它 控制器的主要目的是一般验证请求参数,然后使用相应的服务进行任何类型的计算或业务逻辑验证。但是如果你想调用控制器,那么你可以使用 Resttemplate 谢谢。如果我先发表评论,则转到服务层。那么我如何利用公司控制器中存在的 EntityToDto 和 Dtotoentity 函数 您能发布您的控制器代码吗?我不知道您是如何实现控制器的功能,例如“EntityToDto”等 【参考方案1】:

为什么不直接调用公司服务(如果两个控制器都存在于同一个应用程序中)?这会比打电话给公司控制员更快。

您的控制器将如下所示:

@RestController
public class UsersController 
    @Autowired
    private CompanyService companySerivce;

    @RequestMapping("/register")
    public ResponseEntity<User> registerUser()
        //Do whatever you want
        CompanyInfo companyInfo = companyService.getCompanyInfo();
       //Do whatever you want
    

如果你还想直接调用 Company Controller,那么你可以这样做:

@RestController
public class UsersController 
    @Autowired
    private RestTemplate template;

    @RequestMapping("/register")
    public ResponseEntity<User> registerUser()
        ResponseEntity<CompanyInfo> companyInfoResponse = template.getForObject("Url for getCompanyInfo() method", CompanyInfo.class);
        CompanyInfo companyInfo = companyInfoResponse.getBody();
        //Do whatever you want
    

【讨论】:

以上是关于如何在spring boot中从同一个应用程序调用另一个api的主要内容,如果未能解决你的问题,请参考以下文章

如何在apache中从角度调用spring boot api

在spring boot应用程序中从自己的rest api调用另一个rest api

在 Spring Boot 应用程序中从 Angular JS 调用 Rest Services 时出错

如何在 Spring Boot 中从 Azure SAML 2.0 应用程序获取角色或组

如何在 Spring Boot 应用程序中从数据库表中填充实体

如何在我的 Spring Boot 应用程序中从 AWS 访问环境变量