3

I have two RestControllers for user and Company.

  • CompanyController: fetch from and store company information to companies table using service and repo level.

  • UsersController : It is used to fetch and store users.

  • Relationship: Each user is associated with company(User hasOne company).

When new User get registered, we need to fetch company information by id and associate with user profile.

For this, I have one endpoint in CompanyController, named getCompanyInfo. I have to call that endpoint to fetch company data while saving user profile.

How to call another API from same app in Spring Boot?

Pavindu
  • 2,684
  • 6
  • 44
  • 77
Sachin
  • 333
  • 1
  • 4
  • 19
  • 1
    Why not are you calling Company service directly(if both controller exists in same application)? It will be more faster than calling company controller. – Afridi May 26 '17 at 11:42
  • Because i am doing some calculation as well on Company controller. I dont want to lose or rewrite that – Sachin May 26 '17 at 11:46
  • Controller main purpose is to generally validate request parameters and then use respective services for any type of calculation or business logic validation. But still if you want to call controller, then you can use Resttemplate – Afridi May 26 '17 at 11:49
  • Thanks. If i go for first comment moving to service layer. Then how can i utilize EntityToDto and Dtotoentity function present in company controller – Sachin May 26 '17 at 12:04
  • can you please post your controller code? I don't know how did you implemented your controller's functions like "EntityToDto " etc – Afridi May 26 '17 at 12:14
  • You can autowire the controller and call the methods. – ScottSummers Nov 27 '18 at 07:07

1 Answers1

6

Why not are you calling Company service directly(if both controller exists in same application)? It will be more faster than calling company controller.

Your controller will look like this:

@RestController
public class UsersController {
    @Autowired
    private CompanyService companyService;

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

If you still want to directly call Company Controller, then you can do something like this:

    @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
        }
    }
Jan Pfeifer
  • 2,854
  • 25
  • 35
Afridi
  • 6,753
  • 2
  • 18
  • 27