springmvc/springboot处理前台字符串日期自动转换成后台date类型的三种办法
2018-02-06 15:51
906 查看
问题还原:当前台提交日期格式数据到后台保存时,已办以字符串的形式传输,如果后台是data类型接受的话会报400格式错误。这时候就需要处理一下:
第0种(最low的方式):后台用String类型字段接收,如果需要使用再换成date。
第1种:使用@DateTimeFormat(pattern = “yyyy-MM-dd HH:mm:ss”)注解在实体字段上,
这种方式的优点是:可以灵活的定义接收的类型
缺点很明显:不能全局统一处理,需要为每个需要转换字段都加注解太麻烦
第2种:写一个BaseController,每一个需要处理的controller继承这个BaseController,在BaseController里使用@InitBinder写一个全局转换日期方法:
2
3
4
5
这种方式的优点是:可以全局统一处理,不用再关注具体需要转换的日期字段
缺点就是:只能定义一种日期类型,我定义了”yyyy-MM-
4000
dd”就没法定义”yyyy-MM-dd HH:mm:ss”,
如果我前台不同页面过来的日期格式不一样就不好办了
第3种(放大招了):自定义DateConverterConfig实现一下spring提供的Converter,重写里面的convert方法:
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
我这里是springboot项目通过@Component注解将这个类交给spring容器托管的,如果springmvc项目还需要到xml配置文件注册这个类
优点很明显了:足够灵活,在静态代码块里自定义任意格式日期,在重写的方法里在配上对应的正则表达式就行,也可以做到全局统一处理,兼顾了第1种和第二种,完美666!
第0种(最low的方式):后台用String类型字段接收,如果需要使用再换成date。
第1种:使用@DateTimeFormat(pattern = “yyyy-MM-dd HH:mm:ss”)注解在实体字段上,
这种方式的优点是:可以灵活的定义接收的类型
缺点很明显:不能全局统一处理,需要为每个需要转换字段都加注解太麻烦
第2种:写一个BaseController,每一个需要处理的controller继承这个BaseController,在BaseController里使用@InitBinder写一个全局转换日期方法:
@InitBinder public void initBinder(ServletRequestDataBinder binder) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); binder.registerCustomEditor(Date.class, new CustomDateEditor(sdf, true)); }1
2
3
4
5
这种方式的优点是:可以全局统一处理,不用再关注具体需要转换的日期字段
缺点就是:只能定义一种日期类型,我定义了”yyyy-MM-
4000
dd”就没法定义”yyyy-MM-dd HH:mm:ss”,
如果我前台不同页面过来的日期格式不一样就不好办了
第3种(放大招了):自定义DateConverterConfig实现一下spring提供的Converter,重写里面的convert方法:
/** * 全局handler前日期统一处理 * @author zhanghang * @date 2018/1/11 */ @Component public class DateConverterConfig implements Converter<String, Date> { private static final List<String> formarts = new ArrayList<>(4); static{ formarts.add("yyyy-MM"); formarts.add("yyyy-MM-dd"); formarts.add("yyyy-MM-dd hh:mm"); formarts.add("yyyy-MM-dd hh:mm:ss"); } @Override public Date convert(String source) { String value = source.trim(); if ("".equals(value)) { return null; } if(source.matches("^\\d{4}-\\d{1,2}$")){ return parseDate(source, formarts.get(0)); }else if(source.matches("^\\d{4}-\\d{1,2}-\\d{1,2}$")){ return parseDate(source, formarts.get(1)); }else if(source.matches("^\\d{4}-\\d{1,2}-\\d{1,2} {1}\\d{1,2}:\\d{1,2}$")){ return parseDate(source, formarts.get(2)); }else if(source.matches("^\\d{4}-\\d{1,2}-\\d{1,2} {1}\\d{1,2}:\\d{1,2}:\\d{1,2}$")){ return parseDate(source, formarts.get(3)); }else { throw new IllegalArgumentException("Invalid boolean value '" + source + "'"); } } /** * 格式化日期 * @param dateStr String 字符型日期 * @param format String 格式 * @return Date 日期 */ public Date parseDate(String dateStr, String format) { Date date=null; try { DateFormat dateFormat = new SimpleDateFormat(format); date = dateFormat.parse(dateStr); } catch (Exception e) { } return date; } }1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
我这里是springboot项目通过@Component注解将这个类交给spring容器托管的,如果springmvc项目还需要到xml配置文件注册这个类
优点很明显了:足够灵活,在静态代码块里自定义任意格式日期,在重写的方法里在配上对应的正则表达式就行,也可以做到全局统一处理,兼顾了第1种和第二种,完美666!
相关文章推荐
- springmvc/springboot处理前台字符串日期自动转换成后台date类型的三种办法
- spring-boot 接口请求之Date、LocalDate、LocalDateTime日期类型转换处理
- easyui datetimebox处理【前台传递到后台是string类型,但是后台定义的是java.util.date,如何自动转换数据类型】
- SpringMVC @RequestBody接收json字符串,自动将日期字符串转换为java.util.Date
- 后台date类型转换为json字符串时,返回前台页面的是long time值问题解决
- 关于springmvc怎么自动把前台string类型日期字段转换成date类型
- spring boot @ResponseBody转换JSON 时 Date 类型处理方法【两种方法】
- Android:Date、String、Long三种日期类型之间的相互转换
- sprmvc将前台String转化为后台的Date类型
- springboot @RequestBody使用JsonSerialize与 JsonDeserialize自定义转参数,处理Date日期格式
- @RequestBody接收json字符串,自动将日期字符串转换为java.util.Date
- SpringBoot集成Swagger2实现Restful(类型转换错误解决办法)
- sprmvc将前台String转化为后台的Date类型
- Java 日期格式是“Fri Feb 26 16:33:08 CST 2016”字符串类型,转date类型。java.util.date与sql.date的相互转换
- 自定义日期类型的数据绑定 前台 - 后台 或 后台 - 前台 互相转换
- @RequestBody接收json字符串,自动将日期字符串转换为java.util.Date
- Spring 3.1.1使用Mvc配置全局日期转换器,处理日期转换异常
- sprmvc将前台String转化为后台的Date类型
- Date、String、Long三种日期类型之间的相互转换
- 将Date日期类型的字段转换成json字符串