This application has no explicit mapping for /error

SpringSpring MvcFile UploadUpload

Spring Problem Overview


I used maven to do the tutorial https://spring.io/guides/gs/uploading-files/
All the codes I used was copied.

The Application can run, but I get the error:

>Whitelabel Error Page This application has no explicit mapping for /error, so you are seeing this as a fallback. Tue Jun 30 17:24:02 CST 2015 There was an unexpected error (type=Not Found, status=404). No message available

How can I fix it?

Spring Solutions


Solution 1 - Spring

Make sure that your main class is in a root package above other classes.

When you run a Spring Boot Application, (i.e. a class annotated with @SpringBootApplication), Spring will only scan the classes below your main class package.

com
   +- APP
         +- Application.java  <--- your main class should be here, above your controller classes
         |
         +- model
         |   +- user.java
         +- controller
             +- UserController.java

Solution 2 - Spring

When we create a Spring boot application we annotate it with @SpringBootApplication annotation. This annotation 'wraps up' many other necessary annotations for the application to work. One such annotation is @ComponentScan annotation. This annotation tells Spring to look for Spring components and configure the application to run.

Your application class needs to be top of your package hierarchy, so that Spring can scan sub-packages and find out the other required components.

package com.test.spring.boot;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

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

Below code snippet works as the controller package is under com.test.spring.boot package

package com.test.spring.boot.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HomeController {

	@RequestMapping("/")
	public String home(){
		return "Hello World!";
	}
}

Below code snippet does NOT Work as the controller package is NOT under com.test.spring.boot package

package com.test.controller;
    
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
    
@RestController
public class HomeController {
    
     @RequestMapping("/")
     public String home(){
	     return "Hello World!";
     }
 }

From Spring Boot documentation:

> Many Spring Boot developers always have their main class annotated > with @Configuration, @EnableAutoConfiguration and @ComponentScan. > Since these annotations are so frequently used together (especially if > you follow the best practices above), Spring Boot provides a > convenient @SpringBootApplication alternative. > > The @SpringBootApplication annotation is equivalent to using > @Configuration, @EnableAutoConfiguration and @ComponentScan with their > default attributes

Solution 3 - Spring

You can solve this by adding an ErrorController in your application. You can have the error controller return a view that you need.

Error Controller in my application looks like below:

import org.springframework.boot.autoconfigure.web.ErrorAttributes;
import org.springframework.boot.autoconfigure.web.ErrorController;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.context.request.RequestAttributes;
import org.springframework.web.context.request.ServletRequestAttributes;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import java.util.Map;

/**
 * Basic Controller which is called for unhandled errors
 */
@Controller
public class AppErrorController implements ErrorController{

    /**
     * Error Attributes in the Application
     */
    private ErrorAttributes errorAttributes;

    private final static String ERROR_PATH = "/error";

    /**
     * Controller for the Error Controller
     * @param errorAttributes
     */
    public AppErrorController(ErrorAttributes errorAttributes) {
        this.errorAttributes = errorAttributes;
    }

    /**
     * Supports the HTML Error View
     * @param request
     * @return
     */
    @RequestMapping(value = ERROR_PATH, produces = "text/html")
    public ModelAndView errorHtml(HttpServletRequest request) {
        return new ModelAndView("/errors/error", getErrorAttributes(request, false));
    }

    /**
     * Supports other formats like JSON, XML
     * @param request
     * @return
     */
    @RequestMapping(value = ERROR_PATH)
    @ResponseBody
    public ResponseEntity<Map<String, Object>> error(HttpServletRequest request) {
        Map<String, Object> body = getErrorAttributes(request, getTraceParameter(request));
        HttpStatus status = getStatus(request);
        return new ResponseEntity<Map<String, Object>>(body, status);
    }

    /**
     * Returns the path of the error page.
     *
     * @return the error path
     */
    @Override
    public String getErrorPath() {
        return ERROR_PATH;
    }


    private boolean getTraceParameter(HttpServletRequest request) {
        String parameter = request.getParameter("trace");
        if (parameter == null) {
            return false;
        }
        return !"false".equals(parameter.toLowerCase());
    }

    private Map<String, Object> getErrorAttributes(HttpServletRequest request,
                                                   boolean includeStackTrace) {
        RequestAttributes requestAttributes = new ServletRequestAttributes(request);
        return this.errorAttributes.getErrorAttributes(requestAttributes,
                includeStackTrace);
    }

    private HttpStatus getStatus(HttpServletRequest request) {
        Integer statusCode = (Integer) request
                .getAttribute("javax.servlet.error.status_code");
        if (statusCode != null) {
            try {
                return HttpStatus.valueOf(statusCode);
            }
            catch (Exception ex) {
            }
        }
        return HttpStatus.INTERNAL_SERVER_ERROR;
    }
}

The above class is based on Springs BasicErrorController class.

You can instantiate the above ErrorController like this in a @Configuration file:

 @Autowired
 private ErrorAttributes errorAttributes;

 @Bean
 public AppErrorController appErrorController(){return new AppErrorController(errorAttributes);}

You can choose override the default ErrorAttributes by implementing ErrorAttributes. But in most cases the DefaultErrorAttributes should suffice.

Solution 4 - Spring

In my case the controller class was annotated with @Controller. Changing that to @RestController resolved the problem. Basically @RestController is @Controller + @ResponseBody So either use @RestController , or @Controller with @ResponseBody annotation with each method.

Some useful notes here : https://www.genuitec.com/spring-frameworkrestcontroller-vs-controller/

Solution 5 - Spring

in my case it because of package position , meaning package of controller must be above main class package

if my main class package is package co.companyname.spring.tutorial; any controller package should package co.companyname.spring.tutorial.WHAT_EVER_HERE;

package co.companyname.spring.tutorial; // package for main class
@SpringBootApplication
public class FirstProjectApplication {

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


package co.companyname.spring.tutorial.controllers; // package for controllers 

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController 
public class HelloController { 
	 
@RequestMapping("/hello")  
public String hello() {   
 return "Hello, world"; 
 }}

after finish coding press boot dashboard

enter image description here

one last thing to make sure your controller is mapping or not just console you should see somehting smilliar

Mapped "{[/hello]}" onto public java.lang.String co.companyname.spring.tutorial.controllers.HelloController.hello()

happy coding

Solution 6 - Spring

Try adding the dependency.

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

Solution 7 - Spring

This happens when an explicit error page is not defined. To define an error page, create a mapping of /error with a view. e.g. the below code maps to a string value being returned in case of an error.

package com.rumango.controller;

import org.springframework.boot.web.servlet.error.ErrorController;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class IndexController implements ErrorController{
	private final static String PATH = "/error";
	@Override
	@RequestMapping(PATH)
	@ResponseBody
	public String getErrorPath() {
		// TODO Auto-generated method stub
		return "No Mapping Found";
	}

}

Solution 8 - Spring

By default spring boot will scan current package for bean definition. So if your current package where main class is defined and controller package is not same or controller package is not child package of your main app package it will not scan the controller. To solve this issue one can include list of packages for bean definition in main package

@SpringBootApplication(scanBasePackages = {"com.module.restapi1.controller"})

or create a hierarchy of package where child package is derived from main package

package com.module.restapi;
package com.module.restapi.controller

Solution 9 - Spring

I am developing Spring Boot application for a few weeks.. And I was gettig same error like below;

> Whitelabel Error Page This application has no explicit mapping for /error, so you are seeing this as a fallback. Thu Jan 18 14:12:11 AST 2018 There was an unexpected error (type=Not Found, status=404). No message available

When I get this error massage I realized my controller or rest controller class is not defined in my project. I mean our all controller packages aren't same package with main class which include @SpringBootApplication annotation.. I mean you need to add you controller package's name to @ComponentScan annotation to your main class which is includes @SpringBootApplication annotation. If you write codes of below your problem will be solving... Most important thing is you have to add your all controller's package to @ComponentScan annotation like I did in the below

package com.example.demo;

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

@SpringBootApplication
@ComponentScan({ "com.controller.package1, com.controller.package2, com.controller.package3, com.controller.packageN", "controller", "service" } // If our Controller class or Service class is not in the same packages we have //to add packages's name like this...directory(package) with main class
public class MainApp {
	public static void main(String[] args) {
		SpringApplication.run(MainApp.class, args);
	}
}

I hope this codes are going to help someone...

If you find another way to solve this error or you have some suggestions for me, please write to comments... thanks...

Solution 10 - Spring

In the main class, after the configuration "@SpringBootApplication", adding "@ComponentScan" without having any arguments, worked for me !!!

Main Class :

@SpringBootApplication
@ComponentScan
public class CommentStoreApplication {

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

RestController Class :

@RestController
public class CommentStoreApp {
	
	@RequestMapping("/") 
	public String hello() {
		return "Hello World!";
	}
}

P.S: Don't miss to run mvn clean and mvn install commands, before launching the application

Solution 11 - Spring

I added this dependency and it solved my problem.

<dependency>
    <groupId>org.springframework.boot</groupId>

    <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>

Solution 12 - Spring

Quite late to the party. As per spring official documentation "Spring Boot installs a whitelabel error page that you see in a browser client if you encounter a server error." https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#howto-customize-the-whitelabel-error-page

  1. You can disable the feature by setting server.error.whitelabel.enabled=false in application.yml or application.properties file.

2.Recommended way is set your error page so that end user can understand. Under resources/templates folder create a error.html file and add dependency in pom.xml file

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

Spring will automatically choose the error.html page as the default error template. Note:- Don't forget to update maven project after adding dependency.

Solution 13 - Spring

You might be getting the error i.e.

"This application has no explicit mapping for /error, so you are seeing this as a fallback."

This is because it is not scanning your Controller & Service classes which you have to specify in your main() class like this,

package com.example.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
@Configuration
@EnableAutoConfiguration
**@ComponentScan({"com.example.demo", "controller", "service"})**
public class SpringBootMvcExample1Application {
	public static void main(String[] args) {
		SpringApplication.run(SpringBootMvcExample1Application.class, args);
	}
}

Note: Here, I have specified various classes like demo, controller and service to be scanned then only it will work properly.

Solution 14 - Spring

You have to organize the packages so that the package containing public static main(or where you wrote @SpringBootApplication), the father of all your other packages.

Solution 15 - Spring

The problem is that you are navigating to localhost:8080/ instead of localhost:8080/upload as prescribed in the guide. Spring Boot has a default error page used when you navigate to an undefined route to avoid giving away server specific details (which can be viewed as a security risk).

You're options are to either: visit the right page, add your own landing page, or override the white error page.

To simplify this particular situation, I updated the guide so that it uses / instead of /upload.

Solution 16 - Spring

I too got the same error and was able to resolve the error by adding the below dependency to my pom.xml.

<dependency>
    <groupId>org.apache.tomcat.embed</groupId>
    <artifactId>tomcat-embed-jasper</artifactId>
    <scope>provided</scope>
</dependency>

Reason is we are using JSP as the view. Default embedded servlet container for Spring Boot Starter Web is tomcat. To enable support for JSP’s, we would need to add a dependency on tomcat-embed-jasper.

In my case I was returning a JSP as view from controller. Hope this answer helps someone who are struggling with same issue.

Solution 17 - Spring

I know it's not exactly answer to question, but this question is first which appears on Google :)

Problem ("This application has no explicit mapping for /error") appears when trying to access Swagger UI.

In my case problems were caused by @RestController("/endpoint"), which isn't handled properly by swagger.

So, this resulted in errors:

@RestController("/endpoint")
public class EndpointController {

And this was fine

@RestController
@RequestMapping("/endpoint")
public class EndpointController {

Solution 18 - Spring

this can happen if you forget the @RestController annotation on top of your controller class import import org.springframework.web.bind.annotation.RestController;

and add the annotation as below

refer the simple example below

import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.RequestMapping;


@RestController
public class HelloController {
@RequestMapping("/")
    public String index() {
        return "Greetings from Spring Boot!";
    }

}

Solution 19 - Spring

Ensure that you have jasper and jstl in the list of dependencies:

<dependency>
    <groupId>org.apache.tomcat.embed</groupId>
    <artifactId>tomcat-embed-jasper</artifactId>
    <scope>provided</scope>
</dependency>
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>jstl</artifactId>
</dependency>

Here is a working starter project - https://github.com/spring-projects/spring-boot/tree/master/spring-boot-samples/spring-boot-sample-web-jsp

Author: Biju Kunjummen

Solution 20 - Spring

I need to mention this way and give the reference to packages and it worked out. You may exclude @EnableAutoConfiguration this annotation but required for me to bypass any DB related depenencies.

@SpringBootApplication
@EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class})
@ComponentScan(basePackages = {"your package 1", "your package2"})

public class CommentStoreApplication {

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

    }
}

Solution 21 - Spring

Same problem I have faced recently. I have solved it by just getter and setter method spelling correction!

Solution 22 - Spring

The tutorial expects you to have the Thymeleaf template engine in classpath. I ran into the same problem and finally figured this out. I'll reach out to the tutorial author to include that info.

The easiest way if you've followed the tutorial is to add the dependency to your pom.xml in the project root folder. Next time you run your app Spring will detect Thymeleaf and use the uploadform template

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

For the full example see their Github repository.

Solution 23 - Spring

Change @Controller to @RestController in your controller class and everything should go smoothly.

Solution 24 - Spring

I was facing the same problem, using gradle and it got solved on adding following dependencies-

compile('org.springframework.boot:spring-boot-starter-data-jpa')
compile('org.springframework.boot:spring-boot-starter-web')
testCompile('org.springframework.boot:spring-boot-starter-test')
compile('org.apache.tomcat.embed:tomcat-embed-jasper')

earlier I was missing the last one causing the same error.

Solution 25 - Spring

I was facing this issue and then later realized that I was missing the @Configuration annotation in the MvcConfig class which basically does the mapping for ViewControllers and setViewNames.

Here is the content of the file :

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
**@Configuration**
public class MvcConfig implements WebMvcConfigurer{
   public void addViewControllers(ViewControllerRegistry registry)
   {
	  registry.addViewController("/").setViewName("login");
	  registry.addViewController("/login").setViewName("login");
	  registry.addViewController("/dashboard").setViewName("dashboard");
   }
}

Hope this helps somebody!!

Solution 26 - Spring

Make sure @RestController annotation is added right after the @SpringBootApplication. RestController annotation tells Spring that this code describes an endpoint that should be made available over the web.

Solution 27 - Spring

You may have not included thymleaf in your pom.xml file.

Solution 28 - Spring

All I have done to solve this kind of problem is to mention anotation @Configuration in MVCConfig Class.

Like this one :

package com.example;

/**
 * Created by sartika.s.hasibuan on 1/10/2017.
 */
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;

@EnableAutoConfiguration
@Configuration
@ComponentScan
public class MvcConfig extends WebMvcConfigurerAdapter {

    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
        registry.addViewController("/home").setViewName("home");
        registry.addViewController("/").setViewName("home");
        registry.addViewController("/hello").setViewName("hello");
        registry.addViewController("/login").setViewName("login");
    }

}

Solution 29 - Spring

I had a similar mistake, I use the spring boot and velocity, my solution is to check the file application.properties, spring.velocity.toolbox-config-location found that this property is wrong

Solution 30 - Spring

In my case, this problem occurs when running the SpringApplication from within IntelliJ after running it first with maven.

To solve the problem, I run first mvn clean. Then I run SpringApplication from within IntelliJ.

Solution 31 - Spring

Make sure your Main.class should be on top of your controllers. In case of the following example:

Main.class containing:

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

EmployeeController.class containing:

@RestController
public class EmployeeController {
    @InitBinder
    public void setAllowedFields(WebDataBinder dataBinder) {
        dataBinder.setDisallowedFields("id");
    }

    @RequestMapping(value = "/employee/save", method = RequestMethod.GET)
    public String save(){
        Employee newEmp = new Employee();
        newEmp.setAge(25);
        newEmp.setFirstName("Pikachu");
        newEmp.setId(100);
        return "Name: " + newEmp.getFirstName() + ", Age: " + newEmp.getAge() + ", Id = " + newEmp.getId();
    }
}

If your main class is in the root folder, just like this path: {projectname}/src/main/java/main then make sure your controllers below your Main class. For example {projectname}/src/main/java/main/controllers.

Solution 32 - Spring

In your java file ( say: Viper.java )having main class add: "@RestController" and @RequestMapping("/")

@SpringBootApplication
@RestController
public class Viper {

  @RequestMapping("/")
      
   public String home(){
          return "This is what i was looking for";                      
     }

public static void main( String[] args){

   SpringApplication.run(Viper.class , args);
}

}

Solution 33 - Spring

Do check if you have marked the controller class with @RestController annotation.

Solution 34 - Spring

it means you are trying to access the page which is not there. suppose your jsp file is at /webapp/home.jsp now if you use @RequestMapping("/home") on your code and return "home.jsp"; then you will get this error if you try to access using localhost:port/ but if you try localhost:port/home there will be no error you can fix this by checking your @RequestMapping("/") here put /mapping_path of the page you are trying to access. and you can also try adding a dependency of tomcat jaspher from maven dependency

Solution 35 - Spring

In tutorial, the controller is annotated with @Controller which is used to to create a Map of model object and find a view but @RestController simply return the object and object data is directly written into HTTP response as JSON or XML. If you want to view response, use @RestController or use @ResponseBody as well with @Controller.

@Controller
@ResponseBody

Read more: https://javarevisited.blogspot.com/2017/08/difference-between-restcontroller-and-controller-annotations-spring-mvc-rest.html#ixzz5WtrMSJHJ

Solution 36 - Spring

Using Spring Boot and application.properties file I had to change a structure of my project. JSP files should to be in this location: \src\main\resources\META-INF\resources\WEB-INF\jsp. After this change my project works. I've found solution here: https://www.logicbig.com/tutorials/spring-framework/spring-boot/boot-serve-dynamic.html

Solution 37 - Spring

Please make sure You are not placing your View or JSP or HTML in WEB-INF or META-INF

Mention this details carefully:

spring.mvc.view.prefix
spring.mvc.view.suffix

Solution 38 - Spring

I've been getting a similar error while trying out a Spring Boot sample application with Thymeleaf, tried all the different solutions provided unfortunately didn't worked.

My error was that the returned string from Controller method was not having a respective view html.

It might be you have missed or there could be some typo in the file name. As shown in the example inside the controller

@GetMapping("/")
public String listUploadedFiles(Model model) throws IOException {

    model.addAttribute("files", storageService.loadAll().map(
            path -> MvcUriComponentsBuilder.fromMethodName(FileUploadController.class,
                    "serveFile", path.getFileName().toString()).build().toString())
            .collect(Collectors.toList()));

    return "uploadForm";
}

the return String should be match the html file name at

> src/main/resources/templates/uploadForm.html

Thymeleaf will look for the file with same name as in the return type and display the view. You can try with any html file and give the file name in return statement and it will populate the respective view.

Solution 39 - Spring

It sometime happen when your spring app not able to find the spring component and it's not get initialised in sprint container you can add component using @ComponentScan along with your @SpringBootApplication like below example

@SpringBootApplication
@ComponentScan({"model", "service"})
class MovreviewApplication {

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

}

in above example model and service are the packages in my app.

Solution 40 - Spring

If you have annotated the interface with requestMapping, make sure you also annotate the Class which implements the interface with @Component.

Solution 41 - Spring

If all configurations are done correctly (as described in first two-three answers of this question) and still you are getting "Whitelabel Error Page" This application has no explicit mapping for /error, then this solution may help you

Sometimes beside configuration, issue can also be from your code side as well. You might have missed something very basic.
To identify issue you need to check the trace ,for that follow below steps

Open terminal.
1)cd project_location, to get the project location.
e.g. eclipse->project(right click)->properties->resource(tab)->copy path against location field.
2)then run script ./mvnw spring-boot:run

then go to http://localhost:8080/ , http://localhost:8080/xyz whichever url you expecting data.As soon as you hit the link ,trace would have got updated .

I was getting error like
2020-05-23 06:52:42.405 ERROR 3512 --- [nio-8080-exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.orm.jpa.JpaSystemException: No default constructor for entity: : com.ibsplc.com.payroll.model.Employee; nested exception is org.hibernate.InstantiationException: No default constructor for entity: : com.ibsplc.com.payroll.model.Employee] with root cause

So, i added a default constructor for Employee model. run project as maven-build then then run script ./mvnw spring-boot:run,
it worked for me

Solution 42 - Spring

Main class need to be outside of your app packages tree structure. For example: example

Solution 43 - Spring

I was getting this error while using the Keycloak authentication for my Web Application. I could not find the answer with respect to the Keycloak so thought of posting as it can help someone else.

I got this error

This application has no explicit mapping for /error, so you are seeing this as a fallback.

because I was using the property keycloak.bearer-only=true within the application.properties file in the resource of Java application. This will ensure that login cannot take place from the browser so we need to use the token. I removed this commant and it worked within the browser.

If you are using the command keycloak.bearer-only=true and trying to access the application using the browser then you may run into the same issue.

Solution 44 - Spring

In my case, I was facing the issue because my server was already running from the execution of UploadingFilesApplication.java(file with the @SpringBootApplication annotation).

I fixed this issue by simply re-running the server by executing the FileUploadController.java(file with the @Controller annotation).

Solution 45 - Spring

I had a similar problem. And I had Main.class on the top of all the controllers, yet I was facing this issue. All I needed to do is to create a separate swagger configuration file and initialize docket bean in it.

note: location of this file should be either in the same package of the Main.class file or in a package inside that main package.

SwaggerCongiguration.java file

package com.example.springDataJPAUsingGradle;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

@Configuration
@EnableSwagger2
public class SwaggerConfig {
	@Bean
	public Docket docket() {
		return new Docket(DocumentationType.SWAGGER_2).select().build();
	}
}

I also had to add @RequestMapping("/api") in my controller.java. Here's how:

package com.example.springDataJPAUsingGradle.controller;

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

import com.example.springDataJPAUsingGradle.service.StudentService;

@RestController
@RequestMapping("/api")
public class StudentController {

	@Autowired(required = true)
	@GetMapping("/home")
	public String home() {
		return "Welcome to home page";
	}
}

Then after hitting the url: http://localhost:9090/your-app-root/swagger-ui/ swagger UI will be visible. For eg, in my case the url is: http://localhost:9090/students/swagger-ui/

Solution 46 - Spring

I faced this issue while I'm learning spring HATEOAS. I checked all the answers that has given above but the issue is not solved. Finally, i pasted my controller class in "main application.java" package and it worked for me.[![You can see in picture i added my controller class and main class in one package. you can also add "model class, main class and controller class" in same package that also worked for me. In below picture i added controller and main class in the same package.

Project Structure

Solution 47 - Spring

In addition to all the cool answers above. Just check request mapping is available for the method. Here is a sample code.

@RestController
@RequestMapping("api/v1/data")
public class SampleController {

  private final SampleService sampleService;

  @Autowired
  public SampleController(SampleService sampleService) {
    this.sampleService= sampleService;
  }

  @GetMapping
  public List<SimpleData> getData() {
    return sampleService.getData();
  }
}

You may tend to forget to add @GetMapping to the getData method.

Solution 48 - Spring

this error occured for me,

because of controller file(in restfortest package) not in Application.java (SpbdemoApplication) file directory.

enter image description here

to solove this problem,

  1. you can put restfortest package as sub package like rest package which is show in the bellow diagram.

2.other wise you can edit application.java file as bellow diagram.

enter image description here

this error occur because @SpringBootApplication tells Spring to look for Spring components and configure the application to run. spring cannot see the controller class if it not place with in the same package(in here com.pj.lerningcurve.spddemo)

Solution 49 - Spring

Add devtools dependency, this will enable H2ConsoleAutoConfiguration.

 <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <optional>true</optional>
        </dependency>

In logs you can see following line:

o.s.b.a.h2.H2ConsoleAutoConfiguration    : H2 console available at '/h2-console'. Database available at 'jdbc:h2:mem:my-app'

Then try access from

http://localhost:8080/h2-console/

Solution 50 - Spring

Do maven clean or clean verify and try to run it.The instances has to be cleaned before deploying the another project. It worked for me. I tried it for 2 days to understand this.

Solution 51 - Spring

I had tried many ways to fix this problem too, was like, I changed dependency <artifactId>spring-boot-starter-web</artifactId> to <artifactId>spring-boot-starter-thymeleaf</artifactId>, or I replaced annotation @RestController to @Controller but It was the same error. Finally I found a solution by adding a single line of annotation @ComponentScan(basePackages = {"hello"}) on the top of Application class and it works perfectly.

@ComponentScan(basePackages = {"hello"})
public class Application {
    public static void main(String[] args) throws Exception {
        SpringApplication.run(App.class, args);
    }
}

I hope it helps you guys too.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionDeng SteveView Question on Stackoverflow
Solution 1 - Springvignesh SubashView Answer on Stackoverflow
Solution 2 - SpringSomnath MusibView Answer on Stackoverflow
Solution 3 - SpringowaismView Answer on Stackoverflow
Solution 4 - SpringmykeyView Answer on Stackoverflow
Solution 5 - SpringMina FawzyView Answer on Stackoverflow
Solution 6 - SpringSreeView Answer on Stackoverflow
Solution 7 - Springprabhat kumarView Answer on Stackoverflow
Solution 8 - Springanand shuklaView Answer on Stackoverflow
Solution 9 - SpringSemih ErkaracaView Answer on Stackoverflow
Solution 10 - SpringHarikaView Answer on Stackoverflow
Solution 11 - SpringEkene OguikpuView Answer on Stackoverflow
Solution 12 - SpringJoginder MalikView Answer on Stackoverflow
Solution 13 - SpringRupesh BharukaView Answer on Stackoverflow
Solution 14 - SpringsakgeekView Answer on Stackoverflow
Solution 15 - SpringgregturnView Answer on Stackoverflow
Solution 16 - SpringSujanaView Answer on Stackoverflow
Solution 17 - SpringElasView Answer on Stackoverflow
Solution 18 - SpringSithija Piyuman Thewa HettigeView Answer on Stackoverflow
Solution 19 - SpringYersinView Answer on Stackoverflow
Solution 20 - SpringmannedearView Answer on Stackoverflow
Solution 21 - SpringAbdus SalamView Answer on Stackoverflow
Solution 22 - SpringtoomasrView Answer on Stackoverflow
Solution 23 - SpringsupernovaView Answer on Stackoverflow
Solution 24 - Springsiddhartha attriView Answer on Stackoverflow
Solution 25 - SpringArupesh RoyChowdhuryView Answer on Stackoverflow
Solution 26 - SpringBimal ParajuliView Answer on Stackoverflow
Solution 27 - SpringalphcoderView Answer on Stackoverflow
Solution 28 - SpringSartika HasibuanView Answer on Stackoverflow
Solution 29 - Spring叶为正View Answer on Stackoverflow
Solution 30 - SpringMert NuhogluView Answer on Stackoverflow
Solution 31 - SpringAbed GhafferView Answer on Stackoverflow
Solution 32 - SpringMayur ChavanView Answer on Stackoverflow
Solution 33 - SpringKarthik KamathView Answer on Stackoverflow
Solution 34 - SpringJasbin karkiView Answer on Stackoverflow
Solution 35 - SpringbatflixView Answer on Stackoverflow
Solution 36 - SpringTomView Answer on Stackoverflow
Solution 37 - SpringSidView Answer on Stackoverflow
Solution 38 - SpringVishal VijayanView Answer on Stackoverflow
Solution 39 - SpringPavan TView Answer on Stackoverflow
Solution 40 - Springuser11308342View Answer on Stackoverflow
Solution 41 - SpringVivek SinghView Answer on Stackoverflow
Solution 42 - SpringPaulo BereziniView Answer on Stackoverflow
Solution 43 - SpringBATMAN_2008View Answer on Stackoverflow
Solution 44 - SpringKP SinghView Answer on Stackoverflow
Solution 45 - SpringHimanjli JainView Answer on Stackoverflow
Solution 46 - SpringLokeshwarView Answer on Stackoverflow
Solution 47 - SpringdhanushkacView Answer on Stackoverflow
Solution 48 - Springpamal SahanView Answer on Stackoverflow
Solution 49 - SpringPriyaView Answer on Stackoverflow
Solution 50 - SpringrajuView Answer on Stackoverflow
Solution 51 - SpringDimang ChouView Answer on Stackoverflow