Spring MVC中@InitBinder注解是如何应用的?

环境:Springboot2.4.12

简介

​@Controller或@ControllerAdvice类可以有@InitBinder方法来初始化WebDataBinder的实例,这些方法可以:

  1. 将请求参数(即表单或查询数据)绑定到模型对象。
  2. 将基于字符串的请求值(如请求参数、路径变量、头、cookie等)转换为控制器方法参数的目标类型。
  3. 渲染HTML表单时,将模型对象的值格式化为字符串值。

@InitBinder方法可以注册控制器特定的java.bean.PropertyEditor或Spring Converter和 Formatter组件。另外,你可以使用MVC配置在全局共享的FormattingConversionService中注册Converter和Formatter类型。

@InitBinder方法支持许多与@RequestMapping方法相同的参数,除了@ModelAttribute(命令对象)参数。通常,它们是用WebDataBinder参数(用于注册)和一个void返回值声明的。

应用示例

@RestController
@RequestMapping("/demos")
public class DemoController {
  @InitBinder // 1
  public void bind(WebDataBinder binder) { // 2
    binder.registerCustomEditor(Long.class, new PropertyEditorSupport() { // 3
      @Override
      public void setAsText(String text) throws IllegalArgumentException {
        setValue(Long.valueOf(text) + 666L) ;
      }
    }) ;
  }
  @GetMapping("/index")
  public Object index(Long id) {
    return "index - " + id ;
  }
}

注意以下几点:

  1. 使用 @InitBinder 注解。
  2. 接收 WebDataBinder 参数。
  3. 注册自定义的转换器。
  4. 方法返回值必须是 void。

在上面的示例中注册了一个类型转换器从字符串转换为Long类型 并且在原来值基础上增加了666L。

原理解读

  • HandlerAdapter 执行。
public class RequestMappingHandlerAdapter extends AbstractHandlerMethodAdapter implements BeanFactoryAware, Initia
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值