TL; DR向下滚动,找到下面的资源并品尝。
最常见的具有SPA风格的Web服务器,所有路由都将转发至/index。html。 Yes。 Spring boot also can do this。 but it's pretty hard to figure it out until now。 let's do this。
解决这个问题有多少困难? 触摸application.properties? 没有。 写@组态? 不。 写@ControllerAdvice? NAH。 为什么不认为简单的柠檬容易挤?
只是写一个类@Controller并实施错误控制器接口。 就这样。 这是代码!
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";
}
}
不要考虑其他事情,只需编译并运行即可。 您将永远不会看到whitelabel错误页面,并且所有路由都将转发至index。html。 it's SPA style。
我在现实世界中使用此解决方案。 是的。。。很好。
但是请记住,将前端和后端分开将是更好的选择,因为它具有可重用,易于部署的优点以及您所知道的其他优点。