So I am trying to follow this guide on how to serve html files with Spring: http://spring.io/guides/gs/serving-web-content/
I have the exact same folder structure with exact same files but when I run the spring boot server, my localhost:8080/greeting
will only show the string greeting
that is returned from the GreetingController
and that's it, if I look at the page source code, there is no html in it.
I could not find any related answers about this because all the similar answers still use the .xml file driven Spring where you declare the views in a .xml file. But this guide explicitly says that no .xml needs to be used. It should just work like that.
Mapping:
@RestController
public class GreetingController {
@RequestMapping("/greeting")
public String greeting(@RequestParam(value="name", required = false, defaultValue="World") String name, Model model) {
model.addAttribute("name", name);
return "greeting";
}
}
Using @Controller throws error:
2015-02-25 14:50:14.830 ERROR 2378 --- [nio-8080-exec-7] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Circular view path [greeting]: would dispatch back to the current handler URL [/greeting] again. Check your ViewResolver setup! (Hint: This may be the result of an unspecified view, due to default view name generation.)] with root cause
javax.servlet.ServletException: Circular view path [greeting]: would dispatch back to the current handler URL [/greeting] again. Check your ViewResolver setup! (Hint: This may be the result of an unspecified view, due to default view name generation.)
EDIT:
Solution:
a) Use @Controller
instead of @RestController
b) When launching the application in IntelliJ, make sure you create a Gradle task that is ran before executing the Main class.
You are using @RestController
(the documentation) instead of @Controller
.
A convenience annotation that is itself annotated with @Controller and @ResponseBody.
And @ResponseBody
just return to the caller whatever the method returns, string greeting
in your case.
As for the Circular view path exception you are getting, it's probably related to ViewResolver
s. From the spring boot docs
There are many implementations of ViewResolver to choose from, and Spring on its own is not opinionated about which ones you should use. Spring Boot, on the other hand, installs one or two for you depending on what it finds on the classpath and in the application context
So, there is probably something missing in the dependencies. Do you have spring-boot-starter-thymeleaf
dependency configured?
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