当前位置: 首页 > news >正文

spring-webmvc @InitBinder 典型用法

典型用法

注册自定义类型转换器(PropertyEditor / Converter)

用于将请求参数中的字符串转换为特定类型,比如 Date、LocalDate 等。

@InitBinder
public void initDateBinder(WebDataBinder binder) {SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");binder.registerCustomEditor(Date.class, new CustomDateEditor(sdf, false));
}

设置字段白名单(防止字段注入攻击)

有些字段是敏感字段,你不希望用户通过请求随意修改,比如 id、role、isAdmin 等。

@InitBinder
public void initFieldWhitelist(WebDataBinder binder) {binder.setAllowedFields("name", "email", "birthDate"); // 只允许这些字段被绑定
}

如果用户传了 id=123,Spring 将忽略这个字段,不会赋值给对象。

添加验证器(Validator)

结合 Validator 接口,可以对绑定后的对象进行业务规则校验。

@InitBinder
public void initValidator(WebDataBinder binder) {binder.addValidators(new UserValidator());
}

然后在控制器方法中使用 @Valid 启动验证:

@PostMapping("/users")
public String createUser(@Valid User user, BindingResult result) {if (result.hasErrors()) {return "error";}return "success";
}

多个 @InitBinder 方法(可按名称绑定)

你可以写多个 @InitBinder 方法,并指定它们只作用于某个类或字段名。

@InitBinder("user")
public void initUserBinder(WebDataBinder binder) {binder.setAllowedFields("name", "email");
}@InitBinder("product")
public void initProductBinder(WebDataBinder binder) {binder.setAllowedFields("name", "price");
}

与 @ControllerAdvice 结合实现全局配置

如果你希望所有控制器都共享某些绑定规则(如统一日期格式),可以使用 @ControllerAdvice + @InitBinder:

@ControllerAdvice
public class GlobalBindingConfig {@InitBinderpublic void globalInitBinder(WebDataBinder binder) {SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");binder.registerCustomEditor(Date.class, new CustomDateEditor(sdf, true));}
}

这样所有控制器都会默认支持这种日期格式。

http://www.xdnf.cn/news/1059139.html

相关文章:

  • 《挑战你的控制力!开源项目小游戏学习“保持平衡”开发解析:用HTML+JS+CSS实现物理平衡挑战》​
  • 【51单片机】8. 矩阵LED显示自定义图案、动画
  • 用idea操作git缓存区回退、本地库回退、远程库回退
  • singlefligt使用方法和源码解读
  • 无需公网IP:Termux+手机+内网穿透实现Minecraft远程多人联机
  • Uniapp 中根据不同离开页面方式处理 `onHide` 的方法
  • python3:线程管理进程
  • 前端打断点
  • python校园服务交流系统
  • 第十八天:初级数据库学习笔记2
  • easyexcel基于模板生成报表
  • RabbitMQ七种工作模式
  • 21.加密系统函数
  • macOS版的节点小宝上架苹果APP Store了
  • git的使用——初步认识git和基础操作
  • DeepForest开源程序是用于 Airborne RGB 机器学习的 Python 软件包
  • 使用 Elasticsearch 提升 Copilot 能力
  • [计算机网络] 网络的诞生:协议的认知建立
  • 2025年暑期在线实习项目分享
  • 理解 create 指向的箭头函数
  • 从零Gazebo中实现Cartographer算法建图
  • DBeaver 中 Greenplum、PostgreSQL 和 PostgreSQL (old) 驱动的区别
  • 前端跨域解决方案(4):postMessage
  • 剑指offer32_二叉搜索树的后序遍历序列
  • 新发布的一款使用ReactNative新架构加载Svga动画的开源插件[android/ios]
  • 数据结构——选择题—查漏补缺
  • 【unitrix】 3.0 基本结构体(types.rs)
  • 二、OpenCV的第一个程序
  • Uniapp H5端SEO优化全攻略:提升搜索引擎排名与流量
  • 结合 STM32CubeMX 使用 FreeRTOS 实时操作系统