在web开发中比较流行PRG(Post/Redirect/Get)做法,如果有数据输出的话,会放到session里。
对于@RequestMapping注解的方法,直接通过参数注入,把RedirectAttributes实例注入进去就好了
但是,对于@ExceptionHandler注解的方法,却不行。这是因为@ExceptionHandler注解处理类ExceptionHandlerMethodResolver没有RedirectAttributes参数进行处理,
实际上RedirectAttributes也只是个辅助类,最终还是要把内容输出到FlashMap里,我们可以直接输出。
代码如下:
@ControllerAdvice public class GlobalControllerExceptionHandler { @ExceptionHandler(value=BusinessException.class) public String handleBusinessException(BusinessException bex, HttpServletRequest request){ FlashMap outputFlashMap = RequestContextUtils.getOutputFlashMap(request); if (outputFlashMap != null){ outputFlashMap.put("exception", bex); } return "redirect:/error"; } }
像上面这种,只需要做ViewController到View的mapping,而不需要做处理的url,可以通过配置统一处理。
@Configuration public class WebConfig extends WebMvcConfigurerAdapter { @Override public void addViewControllers(ViewControllerRegistry registry) { registry.addViewController("/error").setViewName("error/business_error"); } }
相关推荐
8. **全局异常处理**:除了在每个控制器方法上添加`@ExceptionHandler`,还可以创建一个全局的异常处理器,如实现`HandlerExceptionResolver`接口的类,这样可以在一处集中处理所有未被控制器处理的异常。...
在实际项目中,我们还可以使用`@PathVariable`捕获URL路径中的动态参数,`@RequestParam`获取请求参数,`@RequestBody`读取请求体中的JSON或XML数据,以及`@ResponseBody`将方法返回值直接写入响应体。 另外,`@...
在`exception-handler-master`这个压缩包中,可能包含了一个自定义的`ExceptionHandler`实现,或者是一些示例代码,帮助开发者了解如何在Laravel项目中自定义异常处理。解压并研究这个项目,可以帮助你更好地理解...
这个注解告诉Spring框架,这个类中的方法将负责处理来自客户端的请求。例如: ```java @Controller @RequestMapping("/users") public class UserController { // ... } ``` 在这个例子中,UserController类被标记...
- 当处理器方法返回`ModelAndView`时,可以在`setViewName()`中添加`redirect:`前缀,如`mv.setViewName("redirect:/hello.jsp");` - 如果处理器方法返回`String`,则直接返回包含`redirect:`前缀的视图字符串,如`...
- **添加(Create)**:在控制器中,使用@PostMapping注解定义一个方法来接收POST请求。例如: ```java @PostMapping("/add") public String add(@ModelAttribute("user") User user) { userService.addUser(user);...
可以自动将符合条件的bean注入到当前类的属性或方法参数中。 以上就是 Spring MVC 中的一些常见注解,它们极大地简化了 Web 开发,提高了开发效率。在实际项目中,根据需求可以结合使用这些注解来构建灵活且可维护...
SpringMVC提供了全局异常处理机制,通过@ControllerAdvice和@ExceptionHandler注解,可以集中处理应用程序中可能出现的异常,返回统一的错误信息,提升用户体验。 7. **拦截器(Interceptor)**: SpringMVC的...
除了上述的注解,Spring MVC还有许多其他注解,如`@SessionAttributes`用于在session中存储模型数据,`@ExceptionHandler`用于全局异常处理,`@InitBinder`用于初始化数据绑定行为,等等。这些注解共同构建了一个...
可以定义全局异常处理器,如`@ExceptionHandler`注解的方法,处理特定类型的异常,或者创建`@ControllerAdvice`注解的类来集中处理异常。 **环境搭建步骤:** 1. 创建`springmvc-servlet.xml`配置文件,配置...
- 局部异常处理:通过`@ExceptionHandler`注解在Controller中定义特定的异常处理方法。 - 全局异常处理:通过配置Global Exception Handler,如使用`@ControllerAdvice`注解的类,可以统一处理所有Controller中抛...
控制器中可能会包含一个或多个用@RequestMapping注解标注的方法来映射请求路径。 8. 使用@Controller注解定义一个控制器 @Controller注解告诉Spring这个类是一个控制器,这个控制器将处理用户的请求。 9. 使用@...
Controller是业务逻辑处理者,通常通过注解来定义路由和处理方法。Model用于存储数据,View则负责渲染视图,而ViewResolver则是视图解析器,用于根据给定的逻辑视图名找到实际的视图资源。 基于注解的配置是Spring ...
3. **Redirect 和 Forward**:可以使用 `ModelAndView` 中的 `setViewName()` 分别实现重定向和转发。 **六、异常处理** 1. **@ExceptionHandler**:控制器方法可以处理特定的异常。 2. **Global Exception ...
3. **数据验证**:在`submitBasicInfo`方法中,可以使用`@Valid`注解配合自定义的验证注解(如`@Email`, `@NotBlank`等)进行服务器端验证。 4. **存储信息**:如果验证通过,可以将用户信息保存到临时会话或者...
Spring MVC 提供了@ControllerAdvice 和 @ExceptionHandler 注解,允许开发者统一管理全局异常,提高代码的可维护性。 9. **第十三章:权限拦截器** "ch12-interceptor-permission.rar"专注于权限验证的拦截器实现...
- 对于GET请求,需要在控制器方法中手动处理编码问题,可以通过设置`request`对象的编码方式来解决: ```java public String handleRequest(HttpServletRequest request, HttpServletResponse response) throws ...
使用@ControllerAdvice和@ExceptionHandler,可以在全局范围内统一处理异常,提高代码的可维护性。 总结,SpringMVC是Java Web开发的强大工具,它简化了MVC模式的实现,提高了开发效率,支持各种视图技术,提供了...
8. **异常处理**:Struts2提供了全局异常处理机制,可以通过配置文件定义如何处理未捕获的异常,或者在Action类中使用`@ExceptionHandler`注解。 9. **插件系统**:Struts2有强大的插件体系,可以方便地扩展功能,...
- **方法参数绑定**:在 login() 方法中,Spring MVC 可以自动将请求参数绑定到方法的形参,如 `@RequestParam("username") String username, @RequestParam("password") String password`。 - **视图跳转**:登录...