TL;DR scroll down, get the sources below and taste it.
Most common web server with SPA flavor, All routes will forward to /index.html
.
Yes. Spring boot also can do this. but it's pretty hard to figure it out until now. let's do this.
How much difficult to resolve this?
touch application.properties
? NO.
write @Configuration
? NOPE.
write @ControllerAdvice
? NAH.
Why don't think easy peasy lemon squeezy?
just write a class with @Controller
and implements ErrorController
interface.
that's all. here's the code!
import org.springframework.boot.web.servlet.error.ErrorController; import org.springframework.http.HttpMethod; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @Controller public class SpaErrorController implements ErrorController { @RequestMapping("/error") public Object error(HttpServletRequest request, HttpServletResponse response) { // place your additional code here (such as error logging...) if (request.getMethod().equalsIgnoreCase(HttpMethod.GET.name())) { response.setStatus(HttpStatus.OK.value()); // optional. return "forward:/index.html"; // forward to static SPA html resource. } else { return ResponseEntity.notFound().build(); // or your REST 404 blabla... } } @Override public String getErrorPath() { return "/error"; } }
Don't think other things, just compile and run.
You'll never see whitelabel error page and ALL routes will foward to index.html
.
it's SPA style.
I'm using this solution in real world. ye... uhmm.. pretty good.
But remember, splitting front-end and back-end will be better choice; because of REUSABLE, comfortable deploying, other good point that you know.
Top comments (1)
LOL, never thought this way. What a hack!