本文将阐述springmvc中的数据类型转化。
1、环境约束
- win10 64位操作系统
- idea2018.1.5
- jdk-8u162-windows-x64
- spring4.2.4
2、前提约束
- 完成基于注解的springmvc的demo https://www.jianshu.com/p/d1a84f07c98f
3、操作步骤
1.内置转化
springmvc内置了很多转化器,可以完成大部分的数据转化工作,换言之,绝大多数情况下我们可以不用去关心数据类型的转换,但对于一些特殊的数据类型,比如日期、时间戳等,是需要用户自定义类型转换的。
2.当前Controller
我们先来完成仅对当前Controller起作用的转化器。
- 在src文件夹下创建net.wanho.controller.InitBinderController.java,内容如下:
import net.wanho.ssm.entity.Phone;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.InitBinder;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import java.beans.PropertyEditorSupport;
import java.text.SimpleDateFormat;
import java.util.Date;
@Controller
public class InitBinderController {
@InitBinder
public void init(WebDataBinder binder)
{
binder.registerCustomEditor(Date.class, new PropertyEditorSupport(){
@Override
public String getAsText() {
return super.getAsText();
}
@Override
public void setAsText(String text) throws IllegalArgumentException {
try {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
Date date = simpleDateFormat.parse(text);
setValue(date);
}
catch (Exception e)
{
e.printStackTrace();
}
}
});
}
@RequestMapping("/init/dateformat")
@ResponseBody
public String test0(Date date)
{
return date.toString();
}
}
- 启动tomcat,测试,在浏览器中输入 http://localhost:8080/init/dateformat?date=2019-11-11
上面的只针对当前的InitBinderController.java,我们接下来看对所有Controller起作用的类型转换。
3.全局Controller
- 在src文件夹下创建net.wanho.convertor.String2DateConvertor.java,内容如下:
import org.springframework.core.convert.converter.Converter;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class String2DateConvertor implements Converter<String,Date> {
@Override
public Date convert(String s) {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
Date date = null;
try {
date = simpleDateFormat.parse(s);
} catch (ParseException e) {
e.printStackTrace();
}
return date;
}
}
- 在spring-mvc.xml中加入以下内容:
<mvc:annotation-driven conversion-service="conversion-service" ></mvc:annotation-driven>
<bean id="conversion-service"
class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
<property name="converters">
<list>
<bean class="net.wanho.convertor.String2DateConvertor"></bean>
</list>
</property>
</bean>
- 注释掉InitBinderController.java中的@InitBinder注解
- 启动tomcat,测试,在浏览器中输入 http://localhost:8080/init/dateformat?date=2019-11-11
当前这个转换器,无论对哪一个Controller请求都会起作用。除了采用这种配置的方式完成全局的类型转换外,还可以采用@ControllerAdvice这种横切性的技术,后面我们将会阐述。
以上就是spring中数据类型的转换。