详解SpringMVC注解@initbinder解决类型转换问题
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)

SpringMVC 注解 @InitBinder 解决类型转换问题 在使用 SpringMVC 框架时,经常会遇到表单中的日期字符串和 JavaBean 的 Date 类型的转换问题。 SpringMVC 默认不支持这个格式的转换,因此需要手动配置,自定义数据的绑定才能解决这个问题。在需要日期转换的 Controller 中使用 SpringMVC 的注解 @InitBinder 和 Spring 自带的 WebDataBinder 类来操作。 @InitBinder 注解的作用是初始化 WebDataBinder,用于绑定请求参数到指定的属性编辑器。WebDataBinder 是用来绑定请求参数到指定的属性编辑器。由于前台传到 controller里的值是 String 类型的,当往 Model 里 Set 这个值的时候,如果 set 的这个属性是个对象,Spring 就会去找到对应的 editor 进行转换,然后再 SET 进去。 在使用 @InitBinder 时,需要在 Controller 中定义一个方法,并使用 @InitBinder 注解标注该方法。例如: ``` @InitBinder public void initBinder(WebDataBinder binder) { SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); dateFormat.setLenient(false); binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, true)); } ``` 在上面的代码中,我们使用了 @InitBinder 注解来标注 initBinder 方法,并在该方法中使用 WebDataBinder 的 registerCustomEditor 方法来注册一个自定义的日期编辑器,用于将字符串类型的日期转换为 Date 类型。 在 SpringMVC 的配置文件中,我们需要添加以下配置以启用自定义的日期编辑器: ``` <!-- 解析器注册 --> <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"> <property name="messageConverters"> <list> <ref bean="stringHttpMessageConverter"/> </list> </property> </bean> <!-- String类型解析器,允许直接返回String类型的消息 --> <bean id="stringHttpMessageConverter" class="org.springframework.http.converter.StringHttpMessageConverter"/> ``` 或者使用以下简洁的配置方式: ``` <mvc:annotation-driven> <mvc:message-converters> <bean class="org.springframework.http.converter.StringHttpMessageConverter"> <constructor-arg value="UTF-8"/> </bean> </mvc:message-converters> </mvc:annotation-driven> ``` SpringMVC 在绑定表单之前,都会先注册这些编辑器,Spring 自己提供了大量的实现类,诸如 CustomDateEditor、CustomBooleanEditor、CustomNumberEditor 等许多,基本上够用。使用时候调用 WebDataBinder 的 registerCustomEditor 方法 registerCustomEditor 源码: ``` public void registerCustomEditor(Class<?> requiredType, PropertyEditor propertyEditor) { getPropertyEditorRegistry().registerCustomEditor(requiredType, propertyEditor); } ``` 第一个参数 requiredType 是需要转化的类型。第二个参数 PropertyEditor 是属性编辑器,它是个接口,以上提到的如 CustomDateEditor 等都是继承了实现了这个接口的 PropertyEditorSupport 类。 我们也可以不使用他们自带的这些编辑器类。我们可以自己构造一个自定义的编辑器类,例如: ``` import org.springframework.beans.propertyeditors.PropertiesEditor; public class DoubleEditor extends PropertyEditorSupport { @Override public void setAsText(String text) throws IllegalArgumentExcepition { // 自定义的编辑器逻辑 } } ``` 使用 @InitBinder 注解和 WebDataBinder 类可以解决 SpringMVC 中的类型转换问题,并提供了灵活的自定义编辑器机制,以满足不同的业务需求。






























- 粉丝: 5
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 电催化氧化废水处理技术介绍.ppt
- 论高职单片机教学改革的研究与实践.docx
- 中职数学信息化教学的设计与实施.docx
- 企业组织结构设计.ppt
- 学校建设项目初设概算评估报告(实例).doc
- 换热器传热课件.ppt
- 基于孤立点挖掘的入侵检测技术在网络安全中的应用.doc
- 【中天山西】晋中碧桂园南区二标段技术策划.pdf
- 机械设备岗位操作规程.doc
- 电力建设工程监理规范表格.doc
- 某工程整体性地脚螺栓预埋施工方案.doc
- 中学体育馆装饰工程招标文件.doc
- 环氧树脂的性能及应用特点.doc
- 测量过程管理标准.doc
- 《算法与数据结构》实验教学大纲.doc
- 网络安全技术与公安网络系统安全研究.docx



- 1
- 2
前往页