第(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));
}

这种方式的优点是:可以全局统一处理,不用再关注具体需要转换的日期字段

缺点就是:只能定义一种日期类型,我定义了”yyyy-MM-dd”就没法定义”yyyy-MM-dd HH:mm:ss”,

如果我前台不同页面过来的日期格式不一样就不好办了.

第(3)种:

放大招了):自定义DateConverterConfig实现一下spring提供的Converter,重写里面的convert方法:

import org.springframework.core.convert.converter.Converter;
import org.springframework.stereotype.Component; import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List; /**
* @author MLQ
* @Description: 全局handler前日期统一处理
* @date 2020年1月6日14:25:03
*/
@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;
}
}

我这里是springboot项目通过@Component注解将这个类交给spring容器托管的,如果springmvc项目还需要到xml配置文件注册这个类

优点很明显了:足够灵活,在静态代码块里自定义任意格式日期,在重写的方法里在配上对应的正则表达式就行,也可以做到全局统一处理,兼顾了第1种和第二种

最新文章

  1. http 301 和 302 的区别!
  2. [winserver]设置Server2008R2远程桌面允许每个用户运行多个会话
  3. SharePoint 更新文档库文档标题(Title)字段
  4. [转][ASP.NET MVC 小牛之路]12 - Section、Partial View 和 Child Action
  5. 推荐可以代替Visio的HTML开发的作图工具:ProcessOn
  6. HTML--10Jquery
  7. Grid分组特性
  8. WPF之通过EventTrigger修改模板中元素的属性
  9. nagios监控远程主机端口
  10. Ajax (jquery)实现智能提示搜索框(in Django)
  11. java入门学习(十二)运算语句 if switch
  12. GT-随身调详细教程
  13. 4、爬虫之mongodb
  14. CF1114F Please, another Queries on Array?(线段树,数论,欧拉函数,状态压缩)
  15. 网速4M等于多少KB/S,等于多少kbps
  16. 如何查询表A中的某字段的值在表B中不存在?
  17. 【性能测试】:oracle数据库的监控方式
  18. Coursera机器学习基石 第1讲:The Learning Problem
  19. Eclipse中的maven项目打war包
  20. P3375【模板】KMP字符串匹配

热门文章

  1. go微服务框架kratos学习笔记十(熔断器)
  2. 华为的Java面试题,仅供参考。
  3. &lt;select&gt;标签,不要在select标签中写value属性!!!
  4. 2020年,如何成为一名 iOS 开发高手!
  5. python学习记录_IPython基础,Tab自动完成,内省,%run命令_
  6. python-面向对象小结
  7. Nginx之负载均衡配置(一)
  8. IntelliJ IDEA 2020 全家桶注册码
  9. springboot项目中thymeleaf布局应用
  10. vue--基础应用 全选