我有一个Spring Boot网站(使用freemarker)项目,默认为" / error"已配置路径,它提供我的自定义错误页面(403.ftl,404.ftl等)。
例如,我尝试访问一个不存在的映射,例如// hostname / banana我得到了一个404响应,并显示了我的错误页面,如预期的那样。
但是,我希望能够直接在普通的GET请求中查看这些页面,例如; // hostname / error / 404并使用200状态代码正常查看页面。这是否可能而不必通过新控制器复制所有行为?
答案 0 :(得分:0)
我最终做的是使用 jsp 而不是 freemarker ,我使用默认的错误页面位置来定义我自己的模板并让DefaultErrorViewResolver
渲染它们。
application.properties 配置:
...
spring.mvc.view.prefix=/WEB-INF/views/
spring.mvc.view.suffix=.jsp
...
然后我在WEB-INF/views/error/
的默认位置定义了我的自定义.jsp错误页面(在那里我有; 403.jsp,404.jsp,4xx.jsp,500.jsp,502。 jsp,504.jsp,5xx.jsp )。
然后我有一个基本的控制器:
@Controller
public class ShowErrorPageController {
...
@Autowired
private DefaultErrorViewResolver errorViewResolver;
...
@RequestMapping(path = "/{httpStatus}", method = RequestMethod.GET)
public ModelAndView renderErrorCode(@PathVariable Integer httpStatus, HttpServletRequest request, ModelAndView modelAndView) throws ServletException{
... (error handling, etc. etc.)
HttpStatus status = HttpStatus.valueOf(httpStatus);
Map<String, Object> model = Collections.unmodifiableMap(addErrorAttributes(request));
modelAndView = errorViewResolver.resolveErrorView(request, status, model);
...
return modelAndView;
}
然后你可以简单地访问应用程序并请求任何错误页面(例如:http://hostname/403),它将以HTTP 200响应。这是我需要的,因为我需要通过代理渲染这些页面并且没有& #39; t想要生成任何HTTP错误代码。