SpringMVC实现自定义类型参数绑定

来源:互联网 发布:淘宝霏慕模特 编辑:程序博客网 时间:2024/05/18 04:13

关于SpringMVC参数绑定,常用的简单类型绑定,pojo类型以及包装pojo类型绑定。但是有些类型如日期类型,有多种格式,SpringMVC能识别转换的只有Thu Sep 07 22:34:39 CST 2017这种格式字符串。但是我们常用的则是“2017-07-12 13:20:20”这种格式。所以这时候我们可以自定义参数绑定。

处理原理:前端控制器接收到请求后,找到注解形式的处理器适配器,对RequestMapping标记的方法进行适配,并对方法中的形参进行参数绑定。可以在springmvc处理器适配器上自定义转换器Converter进行参数绑定。
一般使用

<mvc:annotation-driven/>

注解驱动加载处理器适配器,可以在此标签上进行配置。

需求:修改商品信息,成功后跳转到成功页面,修改信息中有日期格式,要求为”yyyy-MM-dd HH:mm:ss”
这里写图片描述

1、jsp页面

<body>     <form id="userForm" action="${pageContext.request.contextPath }/updateItem.action" method="post">        <input type="hidden" name="id" value="${item.id }" /> 修改商品信息:        <table width="100%" border=1>            <tr>                <td>标题</td>                <td><input type="text" name="title" value="${item.title }"/></td>            </tr>            <tr>                <td>卖点</td>                <td><textarea rows="3" cols="30" name="sellPoint">${item.sellPoint }</textarea></td>            </tr>            <tr>                <td>价格</td>                <td><input type="text" name="price" value="${item.price }" /></td>            </tr>            <tr>                <td>销售截止日期</td>                <td><input type="text" name="sellDeadline"                 value='<fmt:formatDate value="${item.sellDeadline }" pattern="yyyy-MM-dd HH:mm:ss"/>' /></td>            </tr>            <tr>                <td colspan="2" align="center"><input type="submit" value="提交" />                </td>            </tr>        </table>    </form></body>

2、表现层

@RequestMapping("/updateItem")//不自定义参数绑定的话出现400的错误    public String updateItem(HttpServletRequest request,TbItem item){        itemService.updateItem(item);        return "success";    }

3、Service层

public void updateItem(TbItem item) {    itemMapper.updateByPrimaryKey(item);}

实体类TbItem

public class TbItem {    private Integer id;    private String title;    private String sellPoint;    private Integer price;    private Date sellDeadline;    private String image;    getset方法 }

持久层使用的是mybatis逆向工程生成的代码就不需要给出了。

一般来说写到这里就行了,但是最后请求都不能到达Controller。因为日期类型”yyyy-MM-dd HH:mm:ss”SpringMVC是不认的不能绑定到item的sellDeadline属性上,页面展示400错误。

所以需要自定义参数绑定
1、自定义日期类型转换器

/** *转换日期类型的数据 *S:页面传递过来的类型 *T:转换后的类型   * @author 12706 * */public class DateConverter implements Converter<String, Date>{    public Date convert(String source) {        Date date = null;        if(source != null && !"".equals(source)){            try {                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");                date = sdf.parse(source);            } catch (ParseException e) {                e.printStackTrace();            }        }        return date;    }}

实现Converter接口,泛型为S,T。重写转换方法convert,其中S为页面传递过来的类型,T为转换后的类型。

2、配置转换器
在配置文件springmvc.xml中

<context:component-scan base-package="com.scu.mvc"/>    <!--指定转换服务为格式转换工厂bean-->    <mvc:annotation-driven conversion-service="formattingConversionServiceFactoryBean"/>    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">        <property name="prefix" value="/WEB-INF/jsp/"/>        <property name="suffix" value=".jsp"/>    </bean>    <!-- 转换器配置 -->    <bean id = "formattingConversionServiceFactoryBean" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">        <property name="converters">            <list>                <!-- 日期格式转换 -->                <bean class="com.scu.mvc.conversion.DateConverter"></bean>            </list>        </property>    </bean>

这时重启服务,修改时间后便能跳转到成功页面。同时id为1的商品的销售截止日期也被修改了。
这里写图片描述

这里写图片描述

阅读全文
0 0
原创粉丝点击