KENDRA SMITH
KENDRA SMITH

Reputation: 105

Receiving a 404 running spring boot

Hello i'm new to spring and i'm receiving a 404 error when attempting to use spring boot. When attempting to view the url in the browser i keep getting a 404 error. Please could someone assist and point me to what is wrong. I placed a debugger in the controller to print HH but i observed it never goes into the controller as it fails to print "HH" on the console. I also noticed this from console:

:50.894  INFO 11249 --- [lication.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-11-15 07:11:50.894  INFO 11249 --- [lication.main()] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error],produces=[text/html]}" onto public org.springframework.web.servlet.ModelAndView org.springframework.

Below is my controller:

@RestController
public class TestController {

    @RequestMapping(value="/person")
    public String intro(){
        System.out.println("HH");
        return "index";
    }
}

pom.xml:

<?xml version="1.0" encoding="UTF-8"?>
<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>org.springExample.www</groupId>
    <artifactId>Hotel-Management</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.2.7.RELEASE</version>
    </parent>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
    </dependencies>

    <properties>
        <java.version>1.8</java.version>
    </properties>


    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

MainApplication.java:

@SpringBootApplication
public class MainApplication {

    public static void main(String[] args) {

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

index.html is defined in src/main/resources/templates:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initialscale=1">
    <title>Bootstrap 101 Template</title>

    <!-- Bootstrap -->
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css" integrity="sha512-dTfge/zgoMYpP7QbHy4gWMEGsbsdZeCXz7irItjcC3sPUFtf0kuFbDz/ixG7ArTxmDjLXDmezHubeNikyKGVyQ==" crossorigin="anonymous">

    <!-- HTML5 Shim and Respond.js IE8 support of HTML5
   elements and media queries -->
    <!-- WARNING: Respond.js doesn't work if you view the
   page via file:// -->
    <!--[if lt IE 9]>
    <script src="https://oss.maxcdn.com/libs/html5shiv/
3.7.0/html5shiv.js"></script>
    <script src="https://oss.maxcdn.com/libs/respond.js/
1.4.2/respond.min.js"></script>
    <![endif]-->

    <style>

        .box {

            background-color:#d3d3d3

        }

    </style>
</head>
<body>
<h1>Hello, world!</h1>

<div class="container">

    <div class="row">

        <div class="col-md-6 box">Content</div>

        <div class="col-md-6 box">Content</div>

    </div>


</div>

<!-- jQuery (necessary for Bootstrap's JavaScript plugins) -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/
jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js" integrity="sha512-K1qjQ+NcF2TYO/eI3M6v8EiNYZfA95pQumfvcVrTHtwQVDG+aHRqLi/ETn2uB+1JqwYqVG3LIvdm9lj6imS/pQ==" crossorigin="anonymous"></script>
</body>
</html>

Upvotes: 2

Views: 1253

Answers (1)

kuporific
kuporific

Reputation: 10323

There a few things to look at:

  1. Use @Controller rather than @RestController. The first is designed to handle views, the second is designed to return raw data.
  2. Move the views to src/main/java/webapp/WEB-INF/. This is the conventional location for views, rather than /src/main/resources.
  3. Change the return value of the intro() method from index to templates/index. The entire path to the view matters.
  4. Add a class annotated with @Configuration that defines a ViewResolver bean that looks for .html views (see this answer).

Upvotes: 1

Related Questions