Talk is cheap , show me your code!
欢迎来到付振南Java博客,让我们一起学习Java吧!

SpringMVC请求参数绑定之自定义类型转换(String转Date)

前面我们说了SpringMVC的请求参数绑定,如何绑定一个实体类型,现在我们在这个基础上在拓展一下。

在我们前端页面提交请求的任何数据都是以字符串的形式提交的,我们的后台直接会把数据全部拿到,但是每个数据的类型可能都是不一样的,所以在SpringMVC中有一个自动帮我们数据类型转换的过滤器,但是他有时候并不能完美的解决我们的问题,比如有个Date类型,前端页面提交的是yyyy/MM/dd类型,它可以帮我们转换成日期类型,那如果有用户写的是yyyy-MM-dd类型呢?这样我们的请求就会报错了,所以我们就需要自定义一个类型转换的工具。

之前我们的User实体类中,有uname和age两个属性,现在我们在新创建一个UserHasDate实体类,在User的基础上新增加一个Date类型的udDate属性。

然后我们还是在原来的ParamsController类中写一个保存有日期类型的方法。

/**
 * 保存有日期的用户
 * @param user
 * @return
 */
@RequestMapping(path = "/saveUser")
public String saveUser(UserHasDate user){
    System.out.println("保存成功!");
    System.out.println(user);
    return "success";
}

然后我们新创建一个jsp页面,写一个提交表单。

<form method="post" action="/params/saveUser">
用户名:<input type="text" name="udName"></br>
年龄:<input type="text" name="udAge"></br>
日期:<input type="text" name="UdDate"></br>
<input type="submit" value="submit"></br>
</form>

然后我们得在utils包下写一个自定义类型转换代码。

package cn.fuzhennan.utils;

import org.springframework.core.convert.converter.Converter;
import org.springframework.lang.Nullable;

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;

public class StringToDateConverter implements Converter<String,Date> {
/**
* 重写一个转换器
* @param source 传进来的参数
* @return
*/
@Override
public Date convert(String source) {
if (source==null){
throw new RuntimeException("请传入参数");
}
DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
try{
//把字符串转换成日期
return df.parse(source);
}catch (Exception e){
throw new RuntimeException("数据转换出现错误。");
}
}
}

最后我们只需要在SpringMVC的配置文件中配置一下就好了,配置很简单,我们在springMVC提供的类型转换的工厂bean中注册一下我们的自定义类型转换类就行了。

<!--配置自定义类型转换器-->
<bean id="conversionServicen" class="org.springframework.context.support.ConversionServiceFactoryBean">
<property name="converters">
<set>
<bean id="stringToDateConverter" class="cn.fuzhennan.utils.StringToDateConverter"/>
</set>
</property>
</bean>

最后我们我们启动tomcat服务器看看结果。

在这里,我们把日期故意写成yyyy-MM-dd的形式

我们清楚的看到,我们写的自定义类型转换器已经成功帮我们把yyyy-MM-dd类型的数据转换成Date类型的了。

赞(0) 打赏
未经允许不得转载:付振南Java博客 » SpringMVC请求参数绑定之自定义类型转换(String转Date)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏