spring原理(第十六天)

@ControllerAdvice 之 @InitBinder

  1. RequestMappingHandlerAdapter 初始化时会解析 @ControllerAdvice 中的 @InitBinder 方法

  2. RequestMappingHandlerAdapter 会以类为单位,在该类首次使用时,解析此类的 @InitBinder 方法

  3. 以上两种 @InitBinder 的解析结果都会缓存来避免重复解析

  4. 控制器方法调用时,会综合利用本类的 @InitBinder 方法和 @ControllerAdvice 中的 @InitBinder 方法创建绑定工厂

控制器方法执行流程

HandlerMethod 需要

  • bean 即是哪个 Controller

  • method 即是 Controller 中的哪个方法

ServletInvocableHandlerMethod 需要

  • WebDataBinderFactory 负责对象绑定、类型转换

  • ParameterNameDiscoverer 负责参数名解析

  • HandlerMethodArgumentResolverComposite 负责解析参数

  • HandlerMethodReturnValueHandlerComposite 负责处理返回值

 

 

  1. RequestMappingHandlerAdapter 初始化时会解析 @ControllerAdvice 中的 @ModelAttribute 方法

  2. RequestMappingHandlerAdapter 会以类为单位,在该类首次使用时,解析此类的 @ModelAttribute 方法

  3. 以上两种 @ModelAttribute 的解析结果都会缓存来避免重复解析

  4. 控制器方法调用时,会综合利用本类的 @ModelAttribute 方法和 @ControllerAdvice 中的 @ModelAttribute 方法创建模型工厂

返回值处理器

常见的返回值处理器

  • ModelAndView,分别获取其模型和视图名,放入 ModelAndViewContainer

  • 返回值类型为 String 时,把它当做视图名,放入 ModelAndViewContainer

  • 返回值添加了 @ModelAttribute 注解时,将返回值作为模型,放入 ModelAndViewContainer

    • 此时需找到默认视图名

  • 返回值省略 @ModelAttribute 注解且返回非简单类型时,将返回值作为模型,放入 ModelAndViewContainer

    • 此时需找到默认视图名

  • 返回值类型为 ResponseEntity 时

    • 此时走 MessageConverter,并设置 ModelAndViewContainer.requestHandled 为 true

  • 返回值类型为 HttpHeaders 时

    • 会设置 ModelAndViewContainer.requestHandled 为 true

  • 返回值添加了 @ResponseBody 注解时

    • 此时走 MessageConverter,并设置 ModelAndViewContainer.requestHandled 为 true

 

  • 6
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值