- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
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的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我有一个休息 Controller : @RestController public abstract class CrudController { @RequestMapping(
如何将 init binder 仅应用于方法?我已经进行了大量搜索以找到此问题的答案。根据docs @InitBinder 中的值是此 init-binder 方法应该应用的命令/表单属性和/或请求参
大家好,我正在尝试使用 initbinder 注释来匹配从乘法列表框中收到的值。列表框中的值是字符串值。最初我使用以下方式进行操作只是为了匹配一个选择(我还没有添加多重选择)并且它工作得很好。代码如下
我正在使用@valid 和@initbinder 来验证传递给服务的数据,但我面临一个问题,即@InitBinder 仅在全局范围内工作,即 @InitBinder // possible to le
我有一个 Spring MVC 应用程序和一个实现 Validator 的验证类。使用 @InitBinder 注释在 Controller 中调用此验证类。此验证发生在将记录插入数据库之前,但是当我
我正在使用 initBinder 添加用户验证器方法: @InitBinder protected void initBinder(WebDataBinder binder) {
我有一个表单,但是当我提交它时,我的 initbinder 没有拦截我的 post 请求。这是我的 initbinder: @InitBinder(value="confermaDto") p
我有一个 java.util.Date 的 initbinder: @InitBinder public void initBinder(WebDataBinder binder) { Sim
我在网上读到了有关 InitBinder 的内容,但不太清楚它是如何工作的。据我了解,它可以用来执行横切关注诸如设置 validator 、将请求参数转换为某些自定义对象等 在网上遇到下面的例子 @I
我有一个命令对象,它代表提交的表单对象。如果表单输入字段中的值为空,我希望它在命令对象中为 null。 我读到了不同的SO question显示使用 InitBinder 我尝试过,但 initBin
我在 JSP 页面上有单选按钮。 Save 列表:人员对象列表对象: Class obj{ Person person; getter/setters } 在该 JS
我正在尝试使用 @InitBind 注释仅映射请求正文中对象上的某些字段。 我有一个以这种方式定义的 Spring Controller : @RequestMapping(value = "addA
当我调试我的 Spring Boot 应用程序时,我注意到每个传入请求都会调用用 @InitBinder 注释的方法。 @InitBinder("categories") public void bi
我有一个程序具有上传文件的功能,然后验证它的名称格式是否正确并将其保存到数据库。 在我的主 Controller 中,我使用@InitBinder 进行验证。 @InitBinder("uploadF
我正在设置@InitBinder 来为Spring MVC Controller 设置验证器。但是,看起来验证器实际上并没有在运行时触发。 Controller 看起来像这样: @Controller
我有一个工作正常的 Controller ,它可以注册和更新一个实体,下面是如何分别创建表单来保存和更新实体 @RequestMapping(value="/registrar.htm", metho
我现在正面临一个关于 JodaTime DateTimes 和 Spring MVC Controller 的奇怪问题。虽然我看到调用了 InitBinder-annotated 方法,但它没有效果,
我正在尝试使用 Spring validator 和 @Validated 来验证我的表单。 但是,我很困惑为什么需要在 @InitBinder 中指定 validator 。 这是 Controll
我想了解@InitBinder。我尝试为多个 Validator 使用多个 InitBinder @InitBinder("Validator1") protected void initBinder
我有一个页面,其中包含自定义项目列表,我在 Controller 的 init 绑定(bind)器中注册了一个自定义编辑器以允许数据绑定(bind)。该列表是从 View 传递的。我遇到的问题是我的
我是一名优秀的程序员,十分优秀!