169

I am trying to adapt the REST Controller example on the Spring Boot website. Unfortunately I've got the following error when I am trying to access the localhost:8080/item URL.

{
  "timestamp": 1436442596410,
  "status": 404,
  "error": "Not Found",
  "message": "No message available",
  "path": "/item"
}

POM:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <modelVersion>4.0.0</modelVersion>
   <groupId>SpringBootTest</groupId>
   <artifactId>SpringBootTest</artifactId>
   <version>0.0.1-SNAPSHOT</version>
   <properties>
      <javaVersion>1.8</javaVersion>
      <mainClassPackage>com.nice.application</mainClassPackage>
      <mainClass>${mainClassPackage}.InventoryApp</mainClass>
   </properties>

   <build>
      <plugins>
         <plugin>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.3</version>
            <configuration>
               <source>${javaVersion}</source>
               <target>${javaVersion}</target>
            </configuration>
         </plugin>

         <!-- Makes the Spring Boot app executable for a jar file. The additional configuration is needed for the cmd: mvn spring-boot:repackage 
            OR mvn spring-boot:run -->
         <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>

            <configuration>
               <mainClass>${mainClass}</mainClass>
               <layout>ZIP</layout>
            </configuration>
            <executions>
               <execution>
                  <goals>
                     <goal>repackage</goal>
                  </goals>
               </execution>
            </executions>
         </plugin>

         <!-- Create a jar with a manifest -->
         <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <version>2.4</version>
            <configuration>
               <archive>
                  <manifest>
                     <mainClass>${mainClass}</mainClass>
                  </manifest>
               </archive>
            </configuration>
         </plugin>
      </plugins>
   </build>

   <dependencyManagement>
      <dependencies>
         <dependency>
            <!-- Import dependency management from Spring Boot. This replaces the usage of the Spring Boot parent POM file. -->
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <version>1.2.5.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
         </dependency>

         <!-- more comfortable usage of several features when developing in an IDE. Developer tools are automatically disabled when 
            running a fully packaged application. If your application is launched using java -jar or if it’s started using a special classloader, 
            then it is considered a 'production application'. Applications that use spring-boot-devtools will automatically restart whenever files 
            on the classpath change. -->
         <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
         </dependency>
      </dependencies>
   </dependencyManagement>

   <dependencies>
      <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-web</artifactId>
      </dependency>

      <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-test</artifactId>
         <scope>test</scope>
      </dependency>

      <dependency>
         <groupId>com.google.guava</groupId>
         <artifactId>guava</artifactId>
         <version>15.0</version>
      </dependency>
   </dependencies>
</project>

Starter-Application:

package com.nice.application;
@SpringBootApplication // same as @Configuration @EnableAutoConfiguration @ComponentScan
public class InventoryApp {
   public static void main( String[] args ) {
      SpringApplication.run( InventoryApp.class, args );
   }
}

REST-Controller:

package com.nice.controller; 
@RestController // shorthand for @Controller and @ResponseBody rolled together
public class ItemInventoryController {
   public ItemInventoryController() {
   }

   @RequestMapping( "/item" )
   public String getStockItem() {
      return "It's working...!";
   }

}

I am building this project with Maven. Started it as jar (spring-boot:run) and as well inside the IDE (Eclipse).

Console Log:

2015-07-09 14:21:52.132  INFO 1204 --- [           main] c.b.i.p.s.e.i.a.InventoryApp          : Starting InventoryApp on 101010002016M with PID 1204 (C:\eclipse_workspace\SpringBootTest\target\classes started by MFE in C:\eclipse_workspace\SpringBootTest)
2015-07-09 14:21:52.165  INFO 1204 --- [           main] ationConfigEmbeddedWebApplicationContext : Refreshing org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@7a3d45bd: startup date [Thu Jul 09 14:21:52 CEST 2015]; root of context hierarchy
2015-07-09 14:21:52.661  INFO 1204 --- [           main] o.s.b.f.s.DefaultListableBeanFactory     : Overriding bean definition for bean 'beanNameViewResolver': replacing [Root bean: class [null]; scope=; abstract=false; lazyInit=false; autowireMode=3; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=org.springframework.boot.autoconfigure.web.ErrorMvcAutoConfiguration$WhitelabelErrorViewConfiguration; factoryMethodName=beanNameViewResolver; initMethodName=null; destroyMethodName=(inferred); defined in class path resource [org/springframework/boot/autoconfigure/web/ErrorMvcAutoConfiguration$WhitelabelErrorViewConfiguration.class]] with [Root bean: class [null]; scope=; abstract=false; lazyInit=false; autowireMode=3; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=org.springframework.boot.autoconfigure.web.WebMvcAutoConfiguration$WebMvcAutoConfigurationAdapter; factoryMethodName=beanNameViewResolver; initMethodName=null; destroyMethodName=(inferred); defined in class path resource [org/springframework/boot/autoconfigure/web/WebMvcAutoConfiguration$WebMvcAutoConfigurationAdapter.class]]
2015-07-09 14:21:53.430  INFO 1204 --- [           main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat initialized with port(s): 8080 (http)
2015-07-09 14:21:53.624  INFO 1204 --- [           main] o.apache.catalina.core.StandardService   : Starting service Tomcat
2015-07-09 14:21:53.625  INFO 1204 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet Engine: Apache Tomcat/8.0.23
2015-07-09 14:21:53.731  INFO 1204 --- [ost-startStop-1] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2015-07-09 14:21:53.731  INFO 1204 --- [ost-startStop-1] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 1569 ms
2015-07-09 14:21:54.281  INFO 1204 --- [ost-startStop-1] o.s.b.c.e.ServletRegistrationBean        : Mapping servlet: 'dispatcherServlet' to [/]
2015-07-09 14:21:54.285  INFO 1204 --- [ost-startStop-1] o.s.b.c.embedded.FilterRegistrationBean  : Mapping filter: 'characterEncodingFilter' to: [/*]
2015-07-09 14:21:54.285  INFO 1204 --- [ost-startStop-1] o.s.b.c.embedded.FilterRegistrationBean  : Mapping filter: 'hiddenHttpMethodFilter' to: [/*]
2015-07-09 14:21:54.508  INFO 1204 --- [           main] s.w.s.m.m.a.RequestMappingHandlerAdapter : Looking for @ControllerAdvice: org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@7a3d45bd: startup date [Thu Jul 09 14:21:52 CEST 2015]; root of context hierarchy
2015-07-09 14:21:54.573  INFO 1204 --- [           main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error]}" onto public org.springframework.http.ResponseEntity<java.util.Map<java.lang.String, java.lang.Object>> org.springframework.boot.autoconfigure.web.BasicErrorController.error(javax.servlet.http.HttpServletRequest)
2015-07-09 14:21:54.573  INFO 1204 --- [           main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error],produces=[text/html]}" onto public org.springframework.web.servlet.ModelAndView org.springframework.boot.autoconfigure.web.BasicErrorController.errorHtml(javax.servlet.http.HttpServletRequest)
2015-07-09 14:21:54.594  INFO 1204 --- [           main] o.s.w.s.handler.SimpleUrlHandlerMapping  : Mapped URL path [/webjars/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2015-07-09 14:21:54.594  INFO 1204 --- [           main] o.s.w.s.handler.SimpleUrlHandlerMapping  : Mapped URL path [/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2015-07-09 14:21:54.633  INFO 1204 --- [           main] o.s.w.s.handler.SimpleUrlHandlerMapping  : Mapped URL path [/**/favicon.ico] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2015-07-09 14:21:54.710  INFO 1204 --- [           main] o.s.j.e.a.AnnotationMBeanExporter        : Registering beans for JMX exposure on startup
2015-07-09 14:21:54.793  INFO 1204 --- [           main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 8080 (http)
2015-07-09 14:21:54.795  INFO 1204 --- [           main] c.b.i.p.s.e.i.a.InventoryApp          : Started InventoryApp in 2.885 seconds (JVM running for 3.227)
2015-07-09 14:22:10.911  INFO 1204 --- [nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring FrameworkServlet 'dispatcherServlet'
2015-07-09 14:22:10.911  INFO 1204 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : FrameworkServlet 'dispatcherServlet': initialization started
2015-07-09 14:22:10.926  INFO 1204 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : FrameworkServlet 'dispatcherServlet': initialization completed in 15 ms

What I've tried so far:

  • Accessing the URL with the application name (InventoryApp)
  • Put another @RequestMapping("/") at class level of the ItemInventoryController

As far as I understood, I won't need an application-context when using Spring Boot. Am I right?

What else can I do to access the method via URL?

mchlfchr
  • 3,998
  • 4
  • 26
  • 35
  • Tried it separetely via Eclipse and with mvn spring-boot:run (as jar). See above for logs (edited) – mchlfchr Jul 09 '15 at 13:02
  • 1
    From the startup log it doesn't look like it's finding your controller, what package is your controller class in? – MattR Jul 09 '15 at 13:03
  • 1
    It's in a separate package. The starter class with the main method is in "application" while the controller is in the package "controller". I've seen examples (not the ones on spring.io), which also were structured in that way. – mchlfchr Jul 09 '15 at 13:06
  • 9
    By default spring-boot will scan for components in the same package, or packages "below" (same prefix) as your application class. Otherwise you need to explicitly scan for them, eg using @ComponentScan – MattR Jul 09 '15 at 13:09
  • The @ComponentScan on the controller didn't work. Same error as above. – mchlfchr Jul 09 '15 at 13:14
  • Adding it to the controller won't help :-) See my answer... – MattR Jul 09 '15 at 13:21

28 Answers28

291

Try adding the following to your InventoryApp class

@SpringBootApplication
@ComponentScan(basePackageClasses = ItemInventoryController.class)
public class InventoryApp {
...

spring-boot will scan for components in packages below com.nice.application, so if your controller is in com.nice.controller you need to scan for it explicitly.

MattR
  • 6,908
  • 2
  • 21
  • 30
  • 2
    I have the same problems. I try with the componentscan but nothing :-( Hier my question: http://stackoverflow.com/questions/33000931/spring-boot-cannot-access-some-controllers – emoleumassi Oct 07 '15 at 19:43
  • 2
    please note that`@SpringBootApplication` includes `@Configuration` – krzakov Dec 09 '15 at 00:07
  • For me, this was not the answer since `@SpringBootApplication` will autoload web.xml, which in turn points to my spring xml config, which in turn auto-scans the correct package base. So, this answer did not resolve my problem. – djangofan Jan 10 '16 at 19:05
  • mmm, sorry but it did not work for me. Even I tried with the "hello, world" from the spring-guide, see https://github.com/spring-guides/gs-rest-service – Gaucho Oct 26 '16 at 15:11
  • 14
    It seems easiest to put the Application in the "root" package, e.g. "org.whatever" and the controllers, services in subpackages. – insan-e Feb 16 '17 at 14:16
  • 7
    I have the same problem but before coming to this solution i found it... More over . take your spring boot application class (in which main method is defined) one level up to the controller package.. then controllers will be visible to this and will work – Tayab Hussain Apr 17 '17 at 08:33
  • struggled for 1 hour but after reading my issue got resolved thanks. – Rahul Maurya Nov 05 '17 at 16:23
  • 2
    You can also use '@ComponentScan(basePackages = "com.nice.controller")'. Component default scan starts on path, where is App class and scan also subsidiary packages. In that case you don't need to use @ComponentScan annotation. It does automatically. If you have more than 1 controller, it is possible to have them in different packages also, you can chain them. In that case it is important to avoid conflicts. – hariprasad Jul 17 '18 at 20:57
  • I have the same problem, the class annotated with restController is in a different package, I have tried setting the values of `basePackages` and `basePackageClasses` but I still get 404. – Bionix1441 Jun 04 '20 at 11:10
  • Hey @Bionix1441, did u solve it? – CodeSlave Feb 25 '22 at 11:29
74

Adding to MattR's answer:

As stated in here, @SpringBootApplication automatically inserts the needed annotations: @Configuration, @EnableAutoConfiguration, and also @ComponentScan; however, the @ComponentScan will only look for the components in the same package as the App, in this case your com.nice.application, whereas your controller resides in com.nice.controller. That's why you get 404 because the App didn't find the controller in the application package.

cipley
  • 1,091
  • 10
  • 15
  • 7
    In case this isn't completely clear already from the above explanation, the class with the @SpringBootApplication annotation must be ABOVE or on the same level in your directory structure as the things you'd like it to find. For example, I had com.app.configuration and com.app.controllers. I mistakenly put my Application class into com.app.configuration, and everything else in com.app.configuration worked fine, but nothing in com.app.controllers was getting loaded. I moved my Application class into com.app and the beans elsewhere were found and things started working. Rookie mistake for me. – glaukommatos Mar 08 '17 at 03:13
  • 3
    Adding @ComponentScan(basePackages="com.base.package") solved it in my case – Shamli Jul 28 '17 at 16:01
  • This really helps. – Madhu Tomy Apr 18 '20 at 02:28
25

Same 404 response I got after service executed with the below code

@Controller
@RequestMapping("/duecreate/v1.0")
public class DueCreateController {

}

Response:

{
"timestamp": 1529692263422,
"status": 404,
"error": "Not Found",
"message": "No message available",
"path": "/duecreate/v1.0/status"
}

after changing it to below code I received proper response

@RestController
@RequestMapping("/duecreate/v1.0")
public class DueCreateController {

}

Response:

{
"batchId": "DUE1529673844630",
"batchType": null,
"executionDate": null,
"status": "OPEN"
}
Mahender Ambala
  • 363
  • 3
  • 18
17

There are 2 method to overcome this

  1. Place the bootup application at start of the package structure and rest all controller inside it.

    Example :

    package com.spring.boot.app; - You bootup application(i.e. Main Method -SpringApplication.run(App.class, args);)

    You Rest Controller in with the same package structure Example : package com.spring.boot.app.rest;

  2. Explicitly define the Controller in the Bootup package.

Method 1 is more cleaner.

4b0
  • 21,981
  • 30
  • 95
  • 142
16

SpringBoot developers recommend to locate your main application class in a root package above other classes. Using a root package also allows the @ComponentScan annotation to be used without needing to specify a basePackage attribute. Detailed info But be sure that the custom root package exists.

torina
  • 3,825
  • 2
  • 26
  • 31
12

I had this issue and what you need to do is fix your packages. If you downloaded this project from http://start.spring.io/ then you have your main class in some package. For example if the package for the main class is: "com.example" then and your controller must be in package: "com.example.controller". Hope this helps.

PaulNUK
  • 4,774
  • 2
  • 30
  • 58
f.trajkovski
  • 794
  • 9
  • 24
  • It means the server is up and running but requests are not being received. – Ajay Takur Nov 27 '20 at 10:17
  • @AjayTakur the server is up and running, the requests are sent but there is no endpoint to process them. In order for the Controller to be functional it needs to be in the proper package or add additional annotation so Spring Boot will scan it and enable it. – f.trajkovski Nov 27 '20 at 16:32
12

The controller should be accessible in the same namespace This is what you have enter image description here

This is how it should be, see the hierarchy of the namespace

enter image description here

Chetan Handa
  • 170
  • 1
  • 7
5

You need to modify the Starter-Application class as shown below.

@SpringBootApplication

@EnableAutoConfiguration

@ComponentScan(basePackages="com.nice.application")

@EnableJpaRepositories("com.spring.app.repository")

public class InventoryApp extends SpringBootServletInitializer {..........

And update the Controller, Service and Repository packages structure as I mentioned below.

Example: REST-Controller

package com.nice.controller; --> It has to be modified as
package com.nice.application.controller;

You need to follow proper package structure for all packages which are in Spring Boot MVC flow.

So, If you modify your project bundle package structures correctly then your spring boot app will work correctly.

Martin Evans
  • 45,791
  • 17
  • 81
  • 97
Anjan
  • 51
  • 1
  • 1
4

Replace @RequestMapping( "/item" ) with @GetMapping(value="/item", produces=MediaType.APPLICATION_JSON_VALUE).

Maybe it will help somebody.

Ihor Khomiak
  • 1,151
  • 11
  • 17
4

New to Springboot, tried everything above, but ended up being as simple as I had a / at the end of the URL on my browser while my only Get() method was blank, just returning a string. Hope this'll help someone someday.

samiup
  • 304
  • 2
  • 6
3

for me, I was adding spring-web instead of the spring-boot-starter-web into my pom.xml

when i replace it from spring-web to spring-boot-starter-web, all maping is shown in the console log.

sakirow
  • 189
  • 1
  • 5
  • 18
1

I had exact same error, I was not giving base package. Giving correct base package,ressolved it.

package com.ymc.backend.ymcbe;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;

@SpringBootApplication
@ComponentScan(basePackages="com.ymc.backend")
public class YmcbeApplication {

    public static void main(String[] args) {
        SpringApplication.run(YmcbeApplication.class, args);
    }

}

Note: not including .controller @ComponentScan(basePackages="com.ymc.backend.controller") because i have many other component classes which my project does not scan if i just give .controller

Here is my controller sample:

package com.ymc.backend.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;


@RestController
@CrossOrigin
@RequestMapping(value = "/user")
public class UserController {

    @PostMapping("/sendOTP")
    public String sendOTP() {
        return "OTP sent";
    };


}
Nabin Kumar Khatiwada
  • 1,546
  • 18
  • 19
1

I found a really great thread for this issue.

https://coderanch.com/t/735307/frameworks/Spring-boot-Rest-api

The controller api should be in the sub directory structure to automatically detect the controllers. Otherwise annotation argument can be used.

@SpringBootApplication(scanBasePackages = {"com.example.demo", "com.example.Controller"})
pankaj pundir
  • 377
  • 3
  • 6
1

I think it's also worth noting that the absolute path of your project matters (in my case it was on a Windows Computer). I had a similar issue, I restructured my project, made sure I had @Controller or @RestController where necessary. I made sure I named my path correctly but somehow I always ended up with a White Label Error Page and when I took a step back I realized I had spaces and special characters at some point in my project's absolute path, hence I moved the same project to a new directory where there is no space and/or special characters at any point in my folders name and it worked.

0

Sometimes spring boot behaves weird. I specified below in application class and it works:

@ComponentScan("com.seic.deliveryautomation.controller")
Jeff Mergler
  • 1,384
  • 20
  • 27
Love Kumar
  • 41
  • 1
0

I got the 404 problem, because of Url Case Sensitivity.

For example @RequestMapping(value = "/api/getEmployeeData",method = RequestMethod.GET) should be accessed using http://www.example.com/api/getEmployeeData. If we are using http://www.example.com/api/getemployeedata, we'll get the 404 error.

Note: http://www.example.com is just for reference which i mentioned above. It should be your domain name where you hosted your application.

After a lot of struggle and apply all the other answers in this post, I got that the problem is with that url only. It might be silly problem. But it cost my 2 hours. So I hope it will help someone.

Mahendran Sakkarai
  • 8,381
  • 6
  • 44
  • 66
0

It also works if we use as follows:

@SpringBootApplication(scanBasePackages = { "<class ItemInventoryController package >.*" })
Dharman
  • 30,962
  • 25
  • 85
  • 135
Muralidhar
  • 113
  • 1
  • 12
0

It could be that something else is running on port 8080, and you're actually connecting to it by mistake.

Definitely check that out, especially if you have dockers that are bringing up other services you don't control, and are port forwarding those services.

Brad Parks
  • 66,836
  • 64
  • 257
  • 336
0

The problem is with your package structure. Spring Boot Application has a specific package structure to allow spring context to scan and load various beans in its context.

In com.nice.application is where your Main Class is and in com.nice.controller, you have your controller classes.

Move your com.nice.controller package into com.nice.application so that Spring can access your beans.

Naresh Bhadke
  • 293
  • 1
  • 6
  • 17
0

Another solution in case it helps: in my case, the problem was that I had a @RequestMapping("/xxx") at class level (in my controller), and in the exposed services I had @PostMapping (value = "/yyyy") and @GetMapping (value = "/zzz"); once I commented the @RequestMapping("/xxx") and managed all at method level, worked like a charm.

maxivis
  • 1,727
  • 3
  • 21
  • 35
0

For me, the problem was that I had set up the Application in a way that it always immediately shut down after starting. So by the time I tried out if I could access the controller, the Application wasn't running anymore. The problem with immediately shutting down is adressed in this thread.

MJL
  • 352
  • 3
  • 11
0

@SpringBootApplication @ComponentScan(basePackages = {"com.rest"}) // basePackageClasses = HelloController.class) // use above componnent scan to add packages public class RestfulWebServicesApplication {

public static void main(String[] args) {
    SpringApplication.run(RestfulWebServicesApplication.class, args);
}

}

0

There may 3 reasons causing for this error:

1>

check your URL you are requesting is correct

2> check if your

using MVC then use @Controller else use @RestController

3> check

whether you have placed Controller package(or Class) outside the root package example: com.example.demo -> is your main package

place controller package inside com.example.demo.controller

Prajwal S M
  • 91
  • 1
  • 1
  • 6
0

I had the same issue, because I created an inner class annotated with @Configuration and it prohibited somehow the component scan.

Valerij Dobler
  • 1,848
  • 15
  • 25
0

I had the same problem, and while the above solution are correct in their own right, they did not work for me, and I found another possible reason that solved it - you have to shut down the application from the port, and restart your application, if doing a Maven Update or a project clean fail to solve it.

Briefly, open a command prompt, and run the following two commands:

netstat -ano | findstr :8080

This command will locate the Process ID that is attached at the port that your app is running on - please make sure to specify the port, if you have it anywhere other than the default.

You will get the following output: enter image description here

What you care about is the number in the last column, which is the process ID associated with the port, on which the instance of the app is running.

If you are using STS4 for your development purposes, you can also see the PID on the top margin of the console, but you do have to squint for it:

enter image description here

At this point, run the next command to kill the process:

taskkill /pid 22552 /f

And it results in this:

enter image description here

Do remember that there will be a different PID for every time you run the application.

And finally, you can run it again, and that should do it.

More relevant materials: Closing network connections

Programmatically shutting down SpringBoot app

epicUsername
  • 611
  • 2
  • 8
  • 21
-1

Change the Return type from String to ResponseEntity

Like : 
@RequestMapping( "/item" )
public ResponseEntity<String> getStockItem() {
        return new ResponseEntity<String>("It's working...!", HttpStatus.OK);
}
-2

Place your springbootapplication class in root package for example if your service,controller is in springBoot.xyz package then your main class should be in springBoot package otherwise it will not scan below packages

ASG
  • 9
-2

You can add inside the POM.

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-configuration-processor</artifactId>
    <version>XXXXXXXXX</version>
</dependency>
cemahi
  • 27
  • 5