三、自定义参数绑定(前端传送的各种表示时间的字符串自动转换成Date类型)

(一)需求
  传递自定义日期格式的时间,比如:2018-08-22 21-40-10或者2018-08-22 21:40:10

1、Order

public class Order extends BaseBean {
    /**
     * 商户id
     */
    private Integer businessId;
    /**
     * 用户id
     */
    private Integer userId;
    /**
     * 价格
     */
    private Double price;

    /**
     * 创建时间
     */
    private Date createDate;
}

2、前端通过ajax请求,创建订单

common.ajax1({
        url : ...,
        type : "POST",
        data : {
            "businessId" : "1",
            "userId" : "1",
            "price" : "100",
            "createDate" : "2018-08-22 21:40:10"
        }
    });

3、后台接收请求,并进行参数绑定

@RequestMapping(value = "/order", method = RequestMethod.POST)
    public ApiCodeDto order(Order order){
        return orderService.order(order);
    }

问题
  到这里问题就出现了,ajax传送过来的businessIduserIdprice都能正常绑定到参数order中,就createDate不行,因为日期数据有很多种格式,springmvc没办法把字符串转换成日期类型,所以order实例对象中的createDate属性为null

解决办法
  自定义参数绑定!

(二)自定义参数绑定

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

  一般使用<mvc:annotation-driven/>注解驱动加载处理器适配器,可以在此标签上进行配置。

2、具体编码

2.1自定义Converter

//Converter<S, T>
//S:source,需要转换的源的类型
//T:target,需要转换的目标类型
public class DateConverter implements Converter<String, Date> {

    @Override
    public Date convert(String source) {
        try {
            // 把字符串转换为日期类型(这里的yyy-MM-dd HH:mm:ss根据前端什么样式就改为什么样式)
            SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyy-MM-dd HH:mm:ss");
            Date date = simpleDateFormat.parse(source);

            return date;
        } catch (ParseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        // 如果转换异常则返回空
        return null;
    }
}

2.2配置Converter

<!-- 配置注解驱动 -->
<mvc:annotation-driven conversion-service="conversionService" />

<!-- 转换器配置 -->
<bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
    <property name="converters">
        <list>
            <bean class="cn.itcast.springmvc.converter.DateConverter" />
        </list>
    </property>
</bean>

2.3实现参数自动转换
  配置好这个参数以后,就会将特定格式的日期字符串自动换为Date类型,无需再手动编码。

猜你喜欢

转载自blog.csdn.net/panchang199266/article/details/81951872