gpt4 book ai didi

spring-mvc - spring-boot自定义404错误页面

转载 作者:行者123 更新时间:2023-12-05 08:56:03 26 4
gpt4 key购买 nike

我正在尝试在 SpringMvc(Spring-boot 版本 1.5.1)中为无效 URL 创建自定义错误页面。

为了禁用默认的 whitelabel 错误页面,我有:

application.properties

spring.thymeleaf.cache=false
server.error.whitelabel.enabled=false
spring.mvc.throw-exception-if-no-handler-found=true
spring.resources.add-mappings=false

我的异常处理程序是:

RestResponseEntityExceptionHandler.java

@ControllerAdvice 
public class RestResponseEntityExceptionHandler extends ResponseEntityExceptionHandler {

public RestResponseEntityExceptionHandler() {
super();
}

@Override
protected ResponseEntity<Object> handleNoHandlerFoundException(NoHandlerFoundException ex,
HttpHeaders headers, HttpStatus status, WebRequest request) {
logger.error("404 Status Code", ex);
final GenericResponse bodyOfResponse = new GenericResponse(messages.getMessage("No such page", null, request.getLocale()), "NoHandlerFound");
return handleExceptionInternal(ex, bodyOfResponse, new HttpHeaders(), HttpStatus.NOT_FOUND, request);
}
}

原则上这是可行的。如果我在浏览器中转到一个无效的 URL,我会得到一个 JSON,如下所示:

{"message":"No such page","error":"NoHandlerFound"}

我想显示一个正确的 HTML View (类似于白标签页面),而不是 JSON 响应。这应该是一个模板,我可以在其中替换“消息”字符串。我该如何渲染这个 View ?

最佳答案

使用 Spring Boot 和 Spring MVC,您可以在 resources/public 下创建一个错误文件夹,并放置您的客户错误页面。 Spring 会接他们。

src/
+- main/
+- java/
| + <source code>
+- resources/
+- public/
+- error/
| +- 404.html
+- <other public assets>

如果您不使用 Spring MVC,则必须通过实现您自己的错误页面注册器来注册错误页面。

@Bean
public ErrorPageRegistrar errorPageRegistrar(){
return new MyErrorPageRegistrar();
}

private static class MyErrorPageRegistrar implements ErrorPageRegistrar {

// Register your error pages and url paths.
@Override
public void registerErrorPages(ErrorPageRegistry registry) {
registry.addErrorPages(new ErrorPage(HttpStatus.BAD_REQUEST, "/400"));
}

}

http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#boot-features-error-handling-custom-error-pages

关于spring-mvc - spring-boot自定义404错误页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42835504/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com