详解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
- 资源: 878
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
- 1
- 2
前往页