The problem:
Using Spring 4, I am getting this when visiting a webpage
Whitelabel Error Page
This application has no explicit mapping for /error, so you are seeing this as a fallback.
Fri Aug 15 16:41:29 BST 2014
There was an unexpected error (type=Not Found, status=404).
What I have:
I have this Main class:
// src/main/java/abc/Main.java
package abc;
import abc.web.WebAppConfig;
import org.springframework.boot.SpringApplication;
public class Main {
public static void main(String[] args) {
SpringApplication.run(WebAppConfig.class);
}
}
Then I have this WebAppConfig.class (currently with just some configuration annotations):
// src/main/java/abc/web/WebAppConfig.java
package abc.web;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.annotation.ComponentScan;
@ComponentScan
@EnableAutoConfiguration
public class WebAppConfig {
}
And this controller HomeController.java:
// src/main/java/abc/web/HomeController.java
package abc.web;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import static org.springframework.web.bind.annotation.RequestMethod.GET;
@Controller
@RequestMapping("/")
public class HomeController {
@RequestMapping(method = GET)
public String home() {
System.out.println("HELLO !!");
return "home";
}
}
The HELLO !! shows up in the logs.
And finally I have a html file at src/main/java/abc/webapp/home.html
, with just some html tags including a p
tag with Hello, world!
.
The question:
I understand that I am missing the way of rendering the view, but I searched a couple of questions on stackoverflow and haven't find a solution yet.
Can someone explain how can I get Spring to render a webpage ? What am I missing ?
Thanks in advance :)
This is a very basic Web Application using Spring Boot that serves a “Hello World” static HTML web page. This will start the embedded Tomcat server at port 8080. The web server is available out of the box with Spring Boot.
The Best Answer is. Using @ResponseBody returns return "login"; as a String object. Any object you return will be attached as payload in the HTTP body as JSON. This is why you are getting just login in the response.
Spring Boot will automatically use and configure Thymeleaf as the view rendering engine, as long as it's on the classpath. To put it on the classpath use
compile("org.springframework.boot:spring-boot-starter-thymeleaf")
in the gradle build file.
If you are using maven add the dependency:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
In your case in order to display the home.html
view (in accordance to the controller you are using), you need to place it under /resources/templates
.
For a complete example, check out this guide.
The simplest answer to the "how can I get Spring Boot to render a webpage?" question is: place your home.html file inside src/main/resources/static/
folder. The page will be available under the /home.html
URL.
More details in the documentation.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With