简体   繁体   中英

Basic Controller Configuration Not working in Spring Boot

I am creating a sample project using Spring Boot and tried to map / with a simple String message. I have used @Controller annotation for this purpose. But for some reason the mapping is not working. I have also included @ComponentScan and @EnableWebMvc with no luck.

I have used maven spring-boot:run goal to run. Uploaded the project at https://github.com/tejact/SpringBasicsTreeHouse .

Here is the controller:

package Controller;

import org.springframework.stereotype.Component;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Component
@Controller
public class GifController {
    @RequestMapping("/")
    @ResponseBody
    public String listAllGifs() {
        return "Listing all gifs : Madhu";
    }    
}

The main application entry:

package com.teja;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;

@EnableAutoConfiguration
@ComponentScan
@EnableWebMvc
public class AppConfig {    
    public static void main(String args[]) {
        SpringApplication.run(AppConfig.class, args);
    }   
}

And Spring Boot logs:

[INFO] Scanning for projects...
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building SpingBasicsTreeHouse 0.0.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] >>> spring-boot-maven-plugin:1.4.0.RELEASE:run (default-cli) > test-compile @ SpingBasicsTreeHouse >>>
[INFO] 
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ SpingBasicsTreeHouse ---
[WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] Copying 0 resource
[INFO] 
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ SpingBasicsTreeHouse ---
[INFO] Changes detected - recompiling the module!
[WARNING] File encoding has not been set, using platform encoding Cp1252, i.e. build is platform dependent!
[INFO] Compiling 2 source files to C:\Users\Teja\git\SpringBasicsTreeHOuse\SpingBasicsTreeHouse\target\classes
[INFO] 
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ SpingBasicsTreeHouse ---
[WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] Copying 0 resource
[INFO] 
[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ SpingBasicsTreeHouse ---
[INFO] Nothing to compile - all classes are up to date
[INFO] 
[INFO] <<< spring-boot-maven-plugin:1.4.0.RELEASE:run (default-cli) < test-compile @ SpingBasicsTreeHouse <<<
[INFO] 
[INFO] --- spring-boot-maven-plugin:1.4.0.RELEASE:run (default-cli) @ SpingBasicsTreeHouse ---

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::        (v1.4.0.RELEASE)

2016-07-31 13:18:24.593  INFO 11084 --- [           main] com.teja.AppConfig                       : Starting AppConfig on Teja-PC with PID 11084 (C:\Users\Teja\git\SpringBasicsTreeHOuse\SpingBasicsTreeHouse\target\classes started by Teja in C:\Users\Teja\git\SpringBasicsTreeHOuse\SpingBasicsTreeHouse)
2016-07-31 13:18:24.598  INFO 11084 --- [           main] com.teja.AppConfig                       : No active profile set, falling back to default profiles: default
2016-07-31 13:18:24.712  INFO 11084 --- [           main] ationConfigEmbeddedWebApplicationContext : Refreshing org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@ae4a4a3: startup date [Sun Jul 31 13:18:24 EDT 2016]; root of context hierarchy
2016-07-31 13:18:26.868  INFO 11084 --- [           main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat initialized with port(s): 8080 (http)
2016-07-31 13:18:26.885  INFO 11084 --- [           main] o.apache.catalina.core.StandardService   : Starting service Tomcat
2016-07-31 13:18:26.886  INFO 11084 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet Engine: Apache Tomcat/8.5.4
2016-07-31 13:18:27.002  INFO 11084 --- [ost-startStop-1] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2016-07-31 13:18:27.003  INFO 11084 --- [ost-startStop-1] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 2297 ms
2016-07-31 13:18:27.184  INFO 11084 --- [ost-startStop-1] o.s.b.w.servlet.ServletRegistrationBean  : Mapping servlet: 'dispatcherServlet' to [/]
2016-07-31 13:18:27.191  INFO 11084 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'characterEncodingFilter' to: [/*]
2016-07-31 13:18:27.434  INFO 11084 --- [           main] s.w.s.m.m.a.RequestMappingHandlerAdapter : Looking for @ControllerAdvice: org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@ae4a4a3: startup date [Sun Jul 31 13:18:24 EDT 2016]; root of context hierarchy
2016-07-31 13:18:27.582  INFO 11084 --- [           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)
2016-07-31 13:18:27.587  INFO 11084 --- [           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,javax.servlet.http.HttpServletResponse)
2016-07-31 13:18:28.004  INFO 11084 --- [           main] o.s.j.e.a.AnnotationMBeanExporter        : Registering beans for JMX exposure on startup
2016-07-31 13:18:28.082  INFO 11084 --- [           main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 8080 (http)
2016-07-31 13:18:28.087  INFO 11084 --- [           main] com.teja.AppConfig                       : Started AppConfig in 4.278 seconds (JVM running for 12.677)

Also my pom.xml looks like the following:

<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>TreeHouse</groupId>
  <artifactId>SpingBasicsTreeHouse</artifactId>
  <version>0.0.1-SNAPSHOT</version>

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

 <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>1.4.0.RELEASE</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

By default @ComponentScan scans the the current package and all the sub packages.

In your case AppConfig class is in package com.teja and the GifController is in Controller package, so it's not scanned.

Move GifController to com.teja.controller for example, or any other sub package of com.teja and it will work.

Usually I keep the bootstraping class and all the configuration classes in package named <com|org|etc>.<myCompany>.<myProject> and then create the other packages as sub packages of this one.

Also you don't need both @Component and @Controller . Remove @Component - @Controller already inherits @Component .

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM