Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Spring Boot - how to include REST endpoint from dependency?

I am new to Spring / Spring Boot, so please pardon if what I am asking is trivial.

I have created Spring Boot application which exposes the REST endpoint:

package com.atomic.contentguard;

...
@Controller
@RequestMapping("/rest")
public class AcgController {

@RequestMapping(value="/acg-status",method=RequestMethod.GET)
@ResponseBody
 public String getStatus(){     
    return "Hi there!";
 }
}

It all works fine when you run it as standalone Spring Boot application, the endpoint is testable by going to http://localhost:8080/rest/acg-status.

What I want to achieve is to "bring it" into another application, which would be including my application as a dependency in the pom.xml, expecting this REST endpoint to show up in it.

What I've done so far is included it in another project pom.xml as:

</dependencies>
    ...
    <dependency>
        <groupId>com.atomic</groupId>
        <artifactId>contentguard</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </dependency>
</dependencies>

And then included it in that other application @ComponentScan section of config file:

@Configuration
@EnableWebMvc
@ComponentScan(basePackages = {"com.atomic.contentguard"})
public class EnvInfoWebConfig extends WebMvcConfigurerAdapter {

}

It does not however show up when you run target application:

No mapping found for HTTP request with URI [/other-application-context/rest/acg-status] in DispatcherServlet with name 'envinfo-dispatcher'

What am I missing / doing wrong?

like image 473
Oleksiy Deverishchev Avatar asked Oct 28 '16 15:10

Oleksiy Deverishchev


1 Answers

You can do this simply by using the spring boot Application Launcher class in your main project as below (You don't need WebMvcConfigurerAdapter class):

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.context.web.SpringBootServletInitializer;
import org.springframework.context.annotation.ComponentScan;

@SpringBootApplication
@ComponentScan(basePackages = { "com.atomic.contentguard"})
public class AcgLauncher extends SpringBootServletInitializer {

    //This method is required to launch the ACG application
    public static void main(String[] args) {

        // Launch Trainserv Application
        SpringApplication.run(AcgLauncher.class, args);
    }
}

Spring Boot uses this class during the server startup and scans the specified packages for all spring components (controllers, services, components).

like image 73
developer Avatar answered Oct 23 '22 15:10

developer