当我们在开发Spring Boot应用时,可能会遇到很多请求异常的情况。如何处理这些异常并且返回对应的HTML页面呢?下面我将会为您提供一份完整的攻略。
步骤1:添加依赖
要实现请求异常处理并返回对应的HTML页面,我们需要添加thymeleaf
和spring-boot-starter-web
两个依赖。
在pom.xml
文件中添加以下依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.5.2</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
<version>2.5.2</version>
</dependency>
由于我们需要在应用程序中使用Thymeleaf
模板引擎,因此需要添加thymeleaf依赖项。 该spring-boot-starter-web
依赖项将为我们启用Web应用程序的相关功能。
步骤2:创建一个异常处理程序
我们需要创建一个处理异常的Controller类来处理异常及返回相应的HTML页面。
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(Exception.class)
public ModelAndView handleException(HttpServletRequest request, Exception ex) {
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("exception", ex);
modelAndView.addObject("url", request.getRequestURL());
modelAndView.setViewName("error");
return modelAndView;
}
}
首先使用@ControllerAdvice
注解,来将全局异常处理类注册为Spring Bean。然后使用@ExceptionHandler
注解来指定处理的异常类型。
在handleException
方法中,我们在模型中添加异常信息和请求URL,并将error
视图名称作为返回结果,最后使用ModelAndView
对象封装返回结果。
步骤3:创建一个异常视图
我们需要创建一个名为error.html
的视图来显示异常信息。
该视图应放置在src/main/resources/templates
目录下,具体代码如下:
<html>
<head>
<title>Error</title>
</head>
<body>
<h1>Error</h1>
<h2>Exception Details:</h2>
{{exception.message ? exception.message : "Unknown error"}}
<br />
<br />
<h2>Request Details:</h2>
<p>URL: {{url}}</p>
</body>
</html>
该视图将包含异常的详细信息和相关的请求信息。
示例1:处理自定义异常
有时,在我们的应用程序中,我们可能需要定义自定义异常并在应用程序中抛出它们。以下是一个示例代码:
public class DataNotFoundException extends RuntimeException {
public DataNotFoundException(String message) {
super(message);
}
}
为了处理这个自定义的异常并返回相应的HTML页面,我们需要修改GlobalExceptionHandler
类:
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(DataNotFoundException.class)
public ModelAndView handleDataNotFoundException(HttpServletRequest request, Exception ex) {
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("exception", ex);
modelAndView.addObject("url", request.getRequestURL());
modelAndView.setViewName("notfound");
return modelAndView;
}
@ExceptionHandler(Exception.class)
public ModelAndView handleException(HttpServletRequest request, Exception ex) {
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("exception", ex);
modelAndView.addObject("url", request.getRequestURL());
modelAndView.setViewName("error");
return modelAndView;
}
}
我们添加了一个新的异常处理程序,处理自定义的DataNotFoundException
异常。在该处理程序中,我们将notfound
视图名称作为返回结果。
示例2:处理其他异常
如果我们没有对某个特定异常类型创建专门的处理程序,则可以使用另一个@ExceptionHandler
方法来处理未处理的异常。以下是一个示例代码:
@RequestMapping("/contacts")
@Controller
public class ContactController {
@GetMapping("/{id}")
public ModelAndView viewContact(@PathVariable("id") Long id) {
Contact contact = contactService.findById(id);
if (contact == null) {
throw new DataNotFoundException("Contact with ID " + id + " not found.");
}
ModelAndView modelAndView = new ModelAndView("view_contact");
modelAndView.addObject("contact", contact);
return modelAndView;
}
}
在上面的示例中,我们使用@GetMapping
注解来定义一个用于查看联系人信息的端点。在该方法中,我们首先根据给定的ID从数据库中获取相应的联系人对象。如果未发现该联系人,则抛出自定义的DataNotFoundException
异常。否则,我们以view_contact
视图呈现联系人信息。
由于我们未对其他未处理的异常创建专用的处理程序,因此应用程序将使用默认的异常处理程序处理这些异常。在我们的实现中,这是handleException()
方法。
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(Exception.class)
public ModelAndView handleException(HttpServletRequest request, Exception ex) {
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("exception", ex);
modelAndView.addObject("url", request.getRequestURL());
modelAndView.setViewName("error");
return modelAndView;
}
}
在上述示例中,我们定义了一个异常处理程序,该程序将捕获未经指定处理程序处理的任何异常,并使用默认的error
视图呈现异常信息。
以上就是处理Spring Boot请求异常并返回相应的HTML页面的完整攻略及两条示例代码。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:spring boot请求异常处理并返回对应的html页面 - Python技术站