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

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

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

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

代码如下:

@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的配置文件加上

<!-- 解析器注册 -->
<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>

拓展:

spring mvc在绑定表单之前,都会先注册这些编辑器,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 IllegalArgumentException {
    if (text == null || text.equals("")) {
      text = "0";
    }
    setValue(Double.parseDouble(text));
  }

  @Override
  public String getAsText() {
    return getValue().toString();
  }
}

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

您可能感兴趣的文章:

  • SpringMVC中利用@InitBinder来对页面数据进行解析绑定的方法
(0)

相关推荐

  • SpringMVC中利用@InitBinder来对页面数据进行解析绑定的方法

    在使用SpingMVC框架的项目中,经常会遇到页面某些数据类型是Date.Integer.Double等的数据要绑定到控制器的实体,或者控制器需要接受这些数据,如果这类数据类型不做处理的话将无法绑定. 这里我们可以使用注解@InitBinder来解决这些问题,这样SpingMVC在绑定表单之前,都会先注册这些编辑器.一般会将这些方法些在BaseController中,需要进行这类转换的控制器只需继承BaseController即可.其实Spring提供了很多的实现类,如CustomDateEdi

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

    在使用SpringMVC的时候,经常会遇到表单中的日期字符串和JavaBean的Date类型的转换,而SpringMVC默认不支持这个格式的转换,所以需要手动配置,自定义数据的绑定才能解决这个问题. 在需要日期转换的Controller中使用SpringMVC的注解@initbinder和Spring自带的WebDateBinder类来操作. WebDataBinder是用来绑定请求参数到指定的属性编辑器.由于前台传到controller里的值是String类型的,当往Model里Set这个值的

  • 详解SpringMVC注解版前台向后台传值的两种方式

    一.概述. 在很多企业的开法中常常用到SpringMVC+Spring+Hibernate(mybatis)这样的架构,SpringMVC相当于Struts是页面到Contorller直接的交互的框架也是界面把信息传输到Contorller层的一种架构,通过这个架构可以让我们把页面和Contorller层解耦,使得开发人员的分工更加明确. 二.代码演示. 1.首先配置SpringMVC环境. 1.1导入jar. 值得注意的是红色标记的commons-logging这个jar包一定得引入进去不然会

  • 详解SpringMVC常用注解功能及属性

    目录 1.@RequestMapping注解 1.1@RequestMapping注解的功能 1.2@RequestMapping注解的位置 1.3@RequestMapping注解的value属性 1.4@RequestMapping注解的method属性 1.5@RequestMapping注解的params属性(了解) 1.6@RequestMapping注解的headers属性(了解) 1.7SpringMVC支持路径中的占位符(@PathVariable)(重点) 2.SpringMV

  • Mybatis详解在注解sql时报错的解决方法

    目录 错误: 文件结构 BookMapper.java BookMapperSQL .java Mybatis的配置文件 分析: 错误: 在做Mybatis用注解方式来注入sql的练习时,报了这样子的错误. 遇到错误很正常,然后我又从学了一遍今天刚刚学的内容,温故而知新嘛. 错误问题如下: 文件结构 BookMapper.java public interface BookMapper { @SelectProvider(type = BookMapperSQL.class,method = "

  • 详解SpringMVC中的日期处理和文件上传操作

    目录 日期格式处理 日期格式处理 创建自定义日期转换器 配置自定义转换器 文件上传下载 文件上传 文件下载 日期格式处理 在控制器中使用对象接收数据 前端: <form action="test/add" method="post"> <p>图书名称:<input type="text" name="bookName"/></p> <p>图书作者:<input

  • 详解SpringMVC的url-pattern配置及原理剖析

    xml里面配置标签: <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd" > <web-app> <display-name>Archetype Created Web Application</display-name> &

  • 详解SpringMVC中的异常处理

    1. SpringMVC默认三个异常处理类 ExceptionHandlerExceptionResolver:处理@ExceptionHandler注解 ResponseStatusExceptionResolver:处理@ResponseStatus注解 DefaultHandlerExceptionResolver:处理SpringMVC自带的异常 如果以上3个异常解析器都无法处理,会上抛给tomcat,处理异常内部的默认工作流程:所有异常解析器依次尝试解析,解析完成进行后续操作,解析失败

  • 详解BadTokenException报错解决方法

    线上出现了如上的 crash,第一解决反应是在 show dialog 之前做个 isFinish 和 isDestroyed 判断,当我翻开代码正要解决时,我惊了,原来已经做过了如上的判断检测,示例伪代码如下: public void showDialog(Activity activity){ new OkHttp().call(new Callback(){ void onSucess(Response resp){ if(activity!=null && !activity.is

  • 实例详解SpringMVC入门使用

    MVC模式(Model-View-Controller)是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model),视图(View)和控制器(Controller).通过分层使开发的软件结构更清晰,从而达到开发效率的提高,可维护性和扩展性得到提高.Spring提供的MVC框架是在J2EE Web开发中对MVC模式的一个实现,本文通过实例讲解一下Spring MVC 的使用. 先来看一个HTTP request在Spring的MVC框架是怎么被处理的:(图片来源于Spring

  • 详解SpringMVC中的异常处理机制

    目录 开头 1.ExceptionHandlerExceptionResolver 2. demo 开头 试想一下我们一般怎么统一处理异常呢,答:切面.但抛开切面不讲,如果对每一个controller方法抛出的异常做专门处理,那么着实太费劲了,有没有更好的方法呢?当然有,就是本篇文章接下来要介绍的springmvc的异常处理机制,用到了ControllerAdvice和ExceptionHandler注解,有点切面的感觉哈哈. 1.ExceptionHandlerExceptionResolve

随机推荐