I have a question about @GetMapping in Spring Boot.
If I have 20 static web pages as .html files. Could I use only one @GetMapping to get every single pages?
For example:
@GetMapping("/{static_webpages}")
public String getWeb() { return "{static_webpages}";}
Then, when the path becomes /page1, it will get page 1, and so on.
CodePudding user response:
Extracting the name of the webpage from the URL.
By adding a parameter to your method and annotating it with the @PathVariable annotation you can extract the name of the webpage.
@GetMapping("/{static_webpage}")
public String getWeb(@PathVariable("static_webpage") String webpage) {
...
}
Return the webpage instead of returning a string
You probably don't want to return the content of the webpage in form of a string.
By using the ModelAndView object as a return type of your method, your method will return a proper webpage.
@GetMapping("/{static_webpage}")
public ModelAndView getWeb(@PathVariable("static_webpage") String webpage) {
...
}
Now we can construct the ModelAndView object to redirect to the given webpage.
@GetMapping("/{static_webpage}")
public ModelAndView getWeb(@PathVariable("static_webpage") String static_webpage) {
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("webpages/" static_webpage);
return modelAndView;
}
In this example the static webpages were saved in the resources/static/webpages directory for the sake of grouping them into one single directory.
If you don't want to group them into one directory you would just store them at resources/static/, although you would have to be careful, because the ModelAndView object would then try to load its own rest endpoint, which would result in an error.
[OPTIONAL] Removing the needed html extension in the url
With the spring.mvc.view.suffix property in your application.properties you can provide a suffix, that is appended to every ModelAndView webpage you create.
spring.mvc.view.suffix = .html
This means that instead of having to access the webpage /myexamplepage.html
you would only have to access /myexamplepage.
