解决的问题 :
解决网页输入的数据类型不匹配的问题,将数据类型转换
两个接口:
✓
1、Converter接口 : org.springframework.core.convert.converter.Converter
✓
2、Formatter接口 :
首先需要创建一个bean类 作为contorller类的 参数
@Data
public class UserInfoModel {
private String username;
private Date birthday;
}
controller类
@Controller(value = "userInfoController")
@RequestMapping(value = "/user-info")
public class UserInfoController {
private static Log log = LogFactory.getLog(UserInfoController.class);
public UserInfoController(){
log.info("正在创建UerInfoController");
}
//参考地址:/user-info/save?username=XXX&birthday=2000-1-1
@RequestMapping(value = "/save")
// 这里传入一个bean类数据类型,等会访问时赋值
public String save(UserInfoModel userInfoModel, Model model) {
log.info("-----------------------------------");
log.info("UerInfoController.save()");
log.info("userInfo:" + userInfoModel);
model.addAttribute("userinfo", userInfoModel);
log.info("-----------------------------------");
return "user-info";
}
}
1、Converter接口
字符串转换日期的Converter接口
package com.wdzl.converter;
import lombok.Data;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.core.convert.converter.Converter;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
@Data //String原数据类型,即用户输入,Date转换所得的数据类型
public class StringToDateConverter implements Converter<String, Date> {
private static Log log = LogFactory.getLog(StringToDateConverter.class);
private String pattern;
//构造方法:无参数的
public StringToDateConverter() {
this.pattern = "yyyy-MM-dd";
log.info("正在创建StringToDateConverter()");
}
//构造方法:有参数的
public StringToDateConverter(String pattern) {
this.pattern = pattern;
log.info("正在创建StringToDateConverter(String pattern)");
}
@Override
public Date convert(String source) {
log.info("StringToDateConverter.convert()");
log.info("source:" + source);
//初始化日期格式化器
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
Date date = null;
try {
//把字符串转换为日期对象
date = simpleDateFormat.parse(source);
} catch (ParseException e) {
e.printStackTrace();
throw new IllegalArgumentException(source + "不能被转换成Date.");
}
log.info("date:" + date);
return date;
}
public static Log getLog() {
return log;
}
public static void setLog(Log log) {
StringToDateConverter.log = log;
}
public String getPattern() {
return pattern;
}
public void setPattern(String pattern) {
this.pattern = pattern;
}
}
还有一部就是配置文件:::
添加一个类型转换器!!!!
<!-- 类型转换器 -->
<!-- ==================================================================================================== -->
<bean id="conversionService"
class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
<property name="converters">
<set>
<bean class="com.wdzl.converter.StringToDateConverter">
<property name="pattern" value="yyyy-MM-dd"></property>
</bean>
</set>
</property>
<!-- 格式化显示的配置 -->
<!-- <property name="formatters">
<set>
<bean class="com.company.project.formatter.DateFormatter" >
<property name="pattern" value="yyyy-MM-dd"></property>
</bean>
</set>
</property> -->
</bean>
是的! 还需要一个jsp接收:
成功案例:
给bean类赋值:原来brithday是Date类型,但是我传进去时String类型
成功将类型转换成Date