gpt4 book ai didi

详解SpringMVC注解@initbinder解决类型转换问题

转载 作者:qq735679552 更新时间:2022-09-27 22:32:09 26 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章详解SpringMVC注解@initbinder解决类型转换问题由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

在使用SpringMVC的时候,经常会遇到表单中的日期字符串和JavaBean的Date类型的转换,而SpringMVC默认不支持这个格式的转换,所以需要手动配置,自定义数据的绑定才能解决这个问题.

在需要日期转换的Controller中使用SpringMVC的注解@initbinder和Spring自带的WebDateBinder类来操作.

WebDataBinder是用来绑定请求参数到指定的属性编辑器.由于前台传到controller里的值是String类型的,当往Model里Set这个值的时候,如果set的这个属性是个对象,Spring就会去找到对应的editor进行转换,然后再SET进去.

代码如下:

?
1
2
3
4
5
6
@InitBinder
public void initBinder(WebDataBinder binder) {
   SimpleDateFormat dateFormat = new SimpleDateFormat( "yyyy-MM-dd" );
   dateFormat.setLenient( false );
   binder.registerCustomEditor(Date. class , new CustomDateEditor(dateFormat, true ));
}

需要在SpringMVC的配置文件加上 。

?
1
2
3
4
5
6
7
8
9
10
<!-- 解析器注册 -->
< 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" />

换种写法 。

?
1
2
3
4
5
6
7
< 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 >

拓展:

spring mvc在绑定表单之前,都会先注册这些编辑器,Spring自己提供了大量的实现类,诸如CustomDateEditor ,CustomBooleanEditor,CustomNumberEditor等许多,基本上够用.

使用时候调用WebDataBinder的registerCustomEditor方法 。

registerCustomEditor源码:

?
1
2
3
public void registerCustomEditor(Class<?> requiredType, PropertyEditor propertyEditor) {
   getPropertyEditorRegistry().registerCustomEditor(requiredType, propertyEditor);
}

第一个参数requiredType是需要转化的类型.

第二个参数PropertyEditor是属性编辑器,它是个接口,以上提到的如CustomDateEditor等都是继承了实现了这个接口的PropertyEditorSupport类.

我们也可以不使用他们自带的这些编辑器类.

我们可以自己构造:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import org.springframework.beans.propertyeditors.PropertiesEditor;
public class DoubleEditor extends PropertyEditorSupport {
   @Override
   public void setAsText(String text) throws IllegalArgumentException {
     if (text == null || text.equals( "" )) {
       text = "0" ;
     }
     setValue(Double.parseDouble(text));
   }
 
   @Override
   public String getAsText() {
     return getValue().toString();
   }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我.

原文链接:https://www.cnblogs.com/aheizi/p/5440884.html 。

最后此篇关于详解SpringMVC注解@initbinder解决类型转换问题的文章就讲到这里了,如果你想了解更多关于详解SpringMVC注解@initbinder解决类型转换问题的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com