《Spring实战》摘录 - 14

2019-05-08 17:40:14 浏览数 (1)

131

Q: #7.4-1 | 什么是控制器通知 A: 控制器通知(controller advice)是任意带有@ControllerAdvice注解的类

132

Q: #7.4-2 | 控制器通知会包含一个或多个如下类型的方法 A:

  • @ExceptionHandler注解标注的方法;
  • @InitBinder注解标注的方法;
  • @ModelAttribute注解标注的方法。

133

Q: #7.4-3 | 如何通过@ControllerAdvice,将所有控制器的异常在同一个地方进行一致处理

A: 通过@ControllerAdvice将所有的@ExceptionHandler方法收集到一个类中,代码如下:

代码语言:javascript复制
package spittr.web;import org.springframework.web.bind.annotation.ControllerAdvice;import org.springframework.web.bind.annotation.ExceptionHandler;
@ControllerAdvice //定义控制器类public class AppWideExceptionHandler{    @ExceptionHandler(DuplicateSpittleException.class) //定义异常处理方法    public String duplicateSpittleHandler(){        return "errot/duplicate";    }}

134

Q: #7.5-1 | 模型的属性是以请求属性的形式存放在请求中的,在重定向后无法存活。请以图示说明 A:

135

Q: #7.5-2 | 显然在spring中,对于重定向来说,模型并不能用来传递数据。但是我们也有一些其他方案,能够从发起重定向的方法传递数据给处理重定向方法中: A:

  • 使用URL模板以路径变量和/或查询参数的形式传递数据;
  • 通过flash属性发送数据。

136

Q: #7.5-3 | 在spring中,flash属性的作用,和实现方式 A:

  • 作用:在会话(跨定向会话)中携带数据。按照定义,flash属性会一直携带这些数据直到下一次请求,然后才会消失。
  • Spring提供了通过RedirectAttributes设置flash属性的方法,这是Spring 3.1引入的Model的一个子接口。RedirectAttributes提供了Model的所有功能,除此之外,还有几个方法是用来设置flash属性的。具体来讲,RedirectAttributes提供了一组addFlashAttribute()方法来添加flash属性。

137

Q: #7.5-4 | 请举个,使用addFlashAttribute()将Spitter对象添加到模型中,的例子 A:

代码语言:javascript复制
@RequestMapping(value="/register", method=POST)public String processRegistration(Object obj, RedirectAttributes model) {  model.addAttribute("username", obj.getUsername());  model.addFlashAttribute("obj", obj);  return "redirect:/obj/{username}";}

138

Q: #7.5.5 | flash属性保存在会话中,然后再放到模型中,因此能够在重定向的过程中存活。请图示这个过程 A:

139

Q: #7.6-1 | Spring Web Flow是什么? A: 这是一个构建在Spring MVC之上的流程框架,它能够引导用户执行一系列向导步骤

140

Q: #8.1.1-1 | 简述执行器的作用 A: 流程执行器(flow executor)驱动流程的执行

0 人点赞