2021-06-04

@InitBinder
public void initBinder(WebDataBinder binder){
    binder.registerCustomEditor(String.class,new StringTrimmerEditor(true));
    binder.registerCustomEditor(Date.class,new CustomDateEditor());
}
@PostMapping("test")
public void test(AstAssetVO astAssetVO,String assetNo){
    System.err.println("test:"+JSON.toJSONString(astAssetVO));
    System.err.println("test:"+assetNo);
}
@PostMapping("test2")
public void test2(AstAssetVO astAssetVO, String assetNo, Date beginExpireDate){
    System.err.println("test2"+JSON.toJSONString(astAssetVO));
    System.err.println("test2"+assetNo);
    System.err.println("test2"+beginExpireDate);
}

@InitBinder标注的方法执行是多次的,一次请求来就执行一次(第一次惩罚)
Controller实例中的所有@InitBinder只对当前所在的Controller有效
@InitBinder的value属性控制的是模型Model里的key,而不是方法名(不写代表对所有的生效)
@InitBinder标注的方法不能有返回值(只能是void或者returnValue=null)
@InitBinder对@RequestBody这种基于消息转换器的请求参数无效
1. 因为@InitBinder它用于初始化DataBinder数据绑定、类型转换等功能,而@RequestBody它的数据解析、转换时消息转换器来完成的,所以即使你自定义了属性编辑器,对它是不生效的(它的WebDataBinder只用于数据校验,不用于数据绑定和数据转换。它的数据绑定转换若是json,一般都是交给了jackson来完成的)
只有AbstractNamedValueMethodArgumentResolver才会调用binder.convertIfNecessary进行数据转换,从而属性编辑器才会生效

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值