说明与作用

springmvc并不是能对所有类型的参数进行绑定的,如果对日期Date类型参数进行绑定,就会报错IllegalStateException错误。所以需要注册一些类型绑定器用于对参数进行绑定。InitBinder注解就有这个作用。

@Controller
public class InitBinderController {@RequestMapping("/testInitBinder")private String testInitBinder(Date date){System.out.println("date = " + date);return "RequsetInitBindDemo";}
}


不能把String类型转换为Date类型报错。

此时就需要一个日期类型转换器。

@InitBinderpublic void dateTypeBinder(WebDataBinder webDataBinder){//往数据绑定器中添加一个DateFormatter日期转化器。webDataBinder.addCustomFormatter(new DateFormatter("yyyy-mm-dd"));}



日期类型转换成功了。

InitBinder注解:

@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface InitBinder {//指定参数名,这个不知控制器方法上形参的参数名,而是请求参数名,可以指定多个。指定后只有这些参数需要用到该转换器。如果不指定,默认所有。String[] value() default {};}

并且使用InitBinder 注册的绑定器只有在当前Controller中才有效,不会作用于其他Controller。

在其他controller中定义一个接收请求的方法。



请求失败。

使用@ControllerAdvice定义全局绑定器

可以使用@ControllerAdvice定义全局绑定器。ControllerAdvice的使用可以看文章

@ControllerAdvice
public class InitBinderAdviseController {@InitBinderpublic void dateTypeBinder(WebDataBinder webDataBinder){//往数据绑定器中添加一个DateFormatter日期转化器。webDataBinder.addCustomFormatter(new DateFormatter("yyyy-mm-dd"));}
}

结果:


不同controller的方法都能作用到。

使用其他格式转化器

我们可以自定义格式转化器,实现Formatter接口就可。还可以添加验证器等等。

public class StringFormatter implements Formatter<String> {private static final String PREFIX = "convertString == ";@Overridepublic String parse(String text, Locale locale) throws ParseException {//所以String类型参数都加上一个前缀。String result = PREFIX + text;return result;}@Overridepublic String print(String object, Locale locale) {return object;}
}

添加

测试:

@RequestMapping("/testInitBinder2")private String testInitBinder1(String name){System.out.println("name = " + name);return "RequsetInitBindDemo";}

结果:


前缀有了。

SpringMVC之@InitBinder注解详解相关推荐

  1. SpringBoot - @InitBinder注解详解

    写在前面 @InitBinder注解可以作用在被@Controller注解的类的方法上,表示为当前控制器注册一个属性编辑器,用于对WebDataBinder进行初始化,且只对当前的Controller ...

  2. SpringMVC学习:控制层(Controller)基于注解详解

    文章目录 一.URL映射Controller的方法返回值 二.SpringMVC各类注解详解 (一) @Controller (二) @RequestMapping 1.基本用法 2. path属性或 ...

  3. spring-boot注解详解(一)

    spring-boot注解详解(一) @SpringBootApplication @SpringBootApplication = (默认属性)@Configuration + @EnableAut ...

  4. SpringMVC接受JSON参数详解及常见错误总结我改

    SpringMVC接受JSON参数详解及常见错误总结 最近一段时间不想使用Session了,想感受一下Token这样比较安全,稳健的方式,顺便写一个统一的接口给浏览器还有APP.所以把一个练手项目的前 ...

  5. Spring Boot注解详解

    文章目录 使用注解的优势 注解详解(配备了完善的释义) 注解列表如下 JPA注解 springMVC相关注解 全局异常处理 项目中具体配置解析和使用环境 使用注解的优势 采用纯java代码,不在需要配 ...

  6. 【SpringBoot 】SpringBoot注解详解

    [SpringBoot ]SpringBoot注解详解 一.注解(annotations)列表  @SpringBootApplication:包含了@ComponentScan.@Configura ...

  7. Spring data JPA 之 Jackson 在实体里面的注解详解

    8 Spring data JPA 之 Jackson 在实体里面的注解详解 经过前⾯课时的讲解,相信你已经对实体⾥⾯的 JPA 注解有了⼀定的了解,但是实际⼯作中你会发现实体⾥⾯不仅有 JPA 的注 ...

  8. @Configuration注解详解

    @Configuration注解详解 Configuration代码简介 Configuration注释类表明其主要目的是作为bean定义的源:@Configuration类允许通过调用同一类中的其他@B ...

  9. 26.SpringBoot事务注解详解

    转自:https://www.cnblogs.com/kesimin/p/9546225.html @Transactional spring 事务注解 1.简单开启事务管理 @EnableTrans ...

最新文章

  1. ValueError: Bin labels must be one fewer than the number of bin edges
  2. xshell中mysql命令大全_Linux之Xshell脚本代码实例
  3. DALL·E才发布两天就被复现?官方论文还没出,大神们就在自制代码和视频了
  4. 通过IFeatureClass 接口查询 IWorkspace, 查询通配符
  5. 《OpenGL超级宝典》编程环境配置
  6. VC实现自定义控件步骤
  7. 基于Python语言使用RabbitMQ消息队列(一)
  8. python有多少种模块_python如何查看有哪些模块
  9. springcloud的简单使用_微服务架构:初识Spring Cloud
  10. lighthouse使用_如何在CircleCI中使用Lighthouse
  11. McAfee安全管理器允许任何用户绕过管理器的安全机制
  12. weblogic占用java_weblogic下java程序占用cpu过高的问题排查
  13. linux 中文乱码 转png_使用pdfBox实现pdf转图片,解决中文方块乱码等问题
  14. 【C/C++】友元函数和友元类
  15. [SDOI2011]计算器
  16. 查看静态库支持的CPU架构
  17. 如何使用雅虎相册在陶宝网增加宝贝描述图片(转)
  18. java io 和nio_java对比IO和NIO的文件读写性能测试
  19. java技术栈是什么_java技术栈必学有哪些?
  20. 微分几何与斯托克定理

热门文章

  1. java jlabel 对齐_java – 将JLabel中的文本对齐
  2. 电脑右下角红叉叉解决方法
  3. windows部署AD域
  4. 时空召唤的服务器维护,时空召唤周更新维护内容公告抢先看
  5. [微信小程序 开发] 云数据库
  6. java快捷截图键,三星手机截屏的快捷键是什么 三种方式迅速截屏【图文】
  7. 隔壁家的WIFI密码如何破解?Python教你百分之百成功蹭网~
  8. 【3D点云】算法总结(持续汇总)
  9. python中base64加密字典_python中的base64加密和解密
  10. Linux下C++多线程编程(入门实例)