Spring 6.x中initBinder里Binder.getTarget()为空,如何绑定自定义键值对?
Spring 6.x 自定义键值映射绑定问题解决方案
Spring 6.x(含Spring Boot 3)中全局@InitBinder的执行时机有所调整,会在目标对象实例化前调用,导致webDataBinder.getTarget()返回null,无法直接绑定自定义属性。以下是两种可行的解决方式:
方案一:通过BindValuesProcessor注入属性值
无需判断目标对象是否存在,直接给WebDataBinder添加绑定值处理器,它会在数据绑定阶段自动执行,此时目标对象已创建完成:
@InitBinder public void initBinder(WebDataBinder webDataBinder, NativeWebRequest request) { webDataBinder.addBindValuesProcessor((values, binder) -> { // 可根据request动态生成属性值 values.addPropertyValue("Test", "123"); }); }
方案二:指定@InitBinder绑定的模型对象
如果自定义绑定仅针对特定模型属性,可在@InitBinder注解中指定属性名称或类型,Spring会在该对象实例化后再调用此方法,此时getTarget()将不为null:
按属性名称指定
@InitBinder("myForm") // 替换为你的模型属性名称 public void initBinder(WebDataBinder webDataBinder, NativeWebRequest request) { MutablePropertyValues map = new MutablePropertyValues(); map.addPropertyValue("Test", "123"); webDataBinder.bind(map); }
按对象类型指定
@InitBinder(MyForm.class) // 替换为你的模型对象类型 public void initBinder(WebDataBinder webDataBinder, NativeWebRequest request) { MutablePropertyValues map = new MutablePropertyValues(); map.addPropertyValue("Test", "123"); webDataBinder.bind(map); }
内容的提问来源于stack exchange,提问作者secret129
相关产品推荐
相关产品推荐

