最近做项目时,同事写的功能总是格式化时间不正确,Java类属性明明注解了@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")  但就是硬生生的被格式化成了2018-03-23,原来是同事居然写了@InitBinder

1.实体类

public class WorkTodoDO implements Serializable {
private static final long serialVersionUID = 1L; // 编号
private Long id;
// 标题简述
private String title;
// 提醒日期 将前台的字符串格式 格式化成日期类型
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date remindDate;
// 事件性质
private String type;
// 级别:是否是重要时间 1:重要,2:普通
private Integer level;
// 到期时间
private Date endDate;
// 提醒方式 1:短信, 2:邮件,3:所有都提示
private String remindType;
// 用户id
private Long userId;
// 创建时间
private Date createDate;
// 修改时间
private Date updateDate; public Long getId() {
return id;
} public void setId(Long id) {
this.id = id;
} public String getTitle() {
return title;
} public void setTitle(String title) {
this.title = title;
} public Date getRemindDate() {
return remindDate;
} public void setRemindDate(Date remindDate) {
this.remindDate = remindDate;
} public String getType() {
return type;
} public void setType(String type) {
this.type = type;
} public Integer getLevel() {
return level;
} public void setLevel(Integer level) {
this.level = level;
} public Date getEndDate() {
return endDate;
} public void setEndDate(Date endDate) {
this.endDate = endDate;
} public String getRemindType() {
return remindType;
} public void setRemindType(String remindType) {
this.remindType = remindType;
} public Long getUserId() {
return userId;
} public void setUserId(Long userId) {
this.userId = userId;
} public Date getCreateDate() {
return createDate;
} public void setCreateDate(Date createDate) {
this.createDate = createDate;
} public Date getUpdateDate() {
return updateDate;
} public void setUpdateDate(Date updateDate) {
this.updateDate = updateDate;
} @Override
public String toString() {
return "WorkTodoDO [id=" + id + ", title=" + title + ", remindDate=" + remindDate + ", type=" + type
+ ", level=" + level + ", endDate=" + endDate + ", remindType=" + remindType + ", userId=" + userId
+ ", createDate=" + createDate + ", updateDate=" + updateDate + "]";
} }

2.前台使用的是bootstrap,日期格式化也是YYYY-MM-DD hh:mm:ss,正常form表单提交

html: 

<input id="remindDate" name="remindDate"
class="laydate-icon layer-date form-control col-sm-1"
onclick="laydate({istime: true, format: 'YYYY-MM-DD hh:mm:ss'})"
placeholder="提醒日期" readonly="readonly"
style="background-color: #fff; border:1px dashed #cbd5dd;" type="text" value="" />
</div>
JS代码:

function save() {
$("#remindStr").val($("#remindDate").val());
$("#form_submit").attr("disabled", true);
$.ajax({
cache : true,
type : "POST",
url : prefix + "/save",
data : new FormData($('#signupForm')[0]),// 你的formid
async : false,
processData: false,
contentType: false,
error : function(request) {
parent.layer.alert("Connection error");
$("#form_submit").attr("disabled", false);
},
success : function(data) {
if (data.code == 0) {
parent.layer.msg("操作成功");
parent.reLoad();
var index = parent.layer.getFrameIndex(window.name); // 获取窗口索引
parent.layer.close(index);
} else {
parent.layer.alert(data.msg)
$("#form_submit").attr("disabled", false);
}
}
});
}

3.controller代码

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Map;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.propertyeditors.CustomDateEditor;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.InitBinder;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody; @Controller
@RequestMapping("oa/todo")
public class WorkTodoController extends BaseController { private static final Logger LOG = LoggerFactory.getLogger(WorkTodoController.class); @Autowired
private WorkTodoService todoService; @GetMapping()
// @RequiresPermissions("oa:todo:todo")
String todo() {
return "oa/todo/todo";
} @ResponseBody
@RequestMapping("/list")
// @RequiresPermissions("oa:todo:todo")
public PageUtils lsit(@RequestParam Map<String, Object> params) {
Query query = new Query(params);
todoService.list(query);
query.put("userId", getUserId());
return todoService.list(query);
} /**
*
*
* @param binder
*/
@InitBinder
public void init(WebDataBinder binder) {
binder.registerCustomEditor(Date.class,
new CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd"), true)); } /**
* 保存
*
* @param workTodoDO
* @return
*/
@ResponseBody
@PostMapping("/save")
// @RequiresPermissions("oa:todo/add")
public R save(WorkTodoDO workTodoDO) {
workTodoDO.setUserId(getUserId());
if (todoService.save(workTodoDO) > 0) {
return R.ok();
} return R.error();
} }

以上就是全部代码。乍一看没什么问题(标红的地方是候来才看到的......欲哭无泪啊)

这里就是这个 @InitBinder 起了作用,他是做表单数据解析绑定的(可以绑定多个不同的实体类),具体场景请参照:

https://blog.csdn.net/xsf1840/article/details/73556633

@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") 前台request 获取body的格式是正确的 (2018-03-23 16:44:22) 但是Java 后台却格式化成了yyyy-MM-dd的格式 巨坑(@InitBinder搞得贵)的更多相关文章

  1. java 后台实现ajax post跨域请求传递json格式数据获取json数据问题

    参考大神:http://blog.csdn.net/chunqiuwei/article/details/19924821 java后台: public String ajaxProxy(Intege ...

  2. 使 IIS 6.0 可以在 64 位 Windows 上运行 32 位应用程序 试图加载格式不正确的程序。

    原文 使 IIS 6.0 可以在 64 位 Windows 上运行 32 位应用程序 试图加载格式不正确的程序. win7 64位操作系统上边运行IIS网站应用的时候,提示错误"试图加载格式 ...

  3. java 日期格式转换EEE MMM dd HH:mm:ss z yyyy

    SimpleDateFormat parserSDF = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzzz yyyy", Locale. ...

  4. Oracle中把一个DateTime的字符串转化成date类型。to_date('2016/12/8 18:55:43','yyyy/MM/dd hh24:mi:ss'),

    Oracle中把一个DateTime或者该形态字符串转化成date类型. to_date('2016/12/8 18:55:43','yyyy/MM/dd hh24:mi:ss'), 或者: sele ...

  5. 【巨坑】springmvc 输出json格式数据的几种方式!

    最近公司项目需要发布一些数据服务,从设计到实现两天就弄完了,心中窃喜之. 结果临近部署时突然发现.....  服务输出的JSON 数据中  date 类型数据输出格式要么是时间戳,要么是  {&quo ...

  6. js将时间戳格式化为HH:ii:ss的格式

    将时间戳格式化为 HH:ii:ss的格式 <html> <head> </head> <body> <span id="time&quo ...

  7. 【单页应用巨坑之History】细数History带给单页应用的噩梦

    前言 在我们日常的网页浏览中,我们非常喜欢做一个操作:点击浏览器的前进后退在Ajax技术出现后,有些时候前进后退就会给开发者带来困扰,甚至一些开发者试图去干掉History随着Html5的发展,移动端 ...

  8. POJ 3178 凸包+DP (巨坑)

    题意: 思路: 这题巨坑!!! 这题巨坑!!! 这题巨坑!!! 这题巨坑!!! 这题巨坑!!! (而且没有题解--.5555555--) 只能照着自己想的写了-- 先求出来凸包 求凸包的方法呢:先找出 ...

  9. 【走过巨坑】android studio对于jni调用及运行闪退无法加载库的问题解决方案

    相信很多小伙伴都在android开发中遇到调用jni的各种巨坑,因为我们不得不在很多地方用到第三方库so文件,然而第三方官方通常都只会给出ADT环境下的集成方式,而谷歌亲儿子android studi ...

随机推荐

  1. Docker 部署Django项目

    使用docker部署django项目也很简单,挺不错,分享下 环境 默认你已安装好docker环境 django项目大概结构 (p3s) [root@opsweb]# tree opsweb opsw ...

  2. jquery选择器和属性

    jQuery的选择器 <html lang="en"> <head> <meta charset="UTF-8"> < ...

  3. Koa 框架教程

    Koa 框架教程   作者: 阮一峰 日期: 2017年8月 9日 Node 主要用在开发 Web 应用.这决定了使用 Node,往往离不开 Web 应用框架. Koa 就是一种简单好用的 Web 框 ...

  4. Oracle.ManagedDataAccess 提示ORA-01017 错误【解决方案】

    Oracle.ManagedDataAccess 提示ORA-01017 错误[解决方案] Oracle.ManagedDataAccess 提示ORA-01017 错误[解决方案] [HKEY_LO ...

  5. UFLDL 教程学习笔记(四)主成分分析

    UFLDL(Unsupervised Feature Learning and Deep Learning)Tutorial 是由 Stanford 大学的 Andrew Ng 教授及其团队编写的一套 ...

  6. redis cluster集群web管理工具 relumin

    redis cluster集群web管理工具 relumin 下载地址 https://github.com/be-hase/relumin 只支持redis cluster模式 java环境 tar ...

  7. Vim 利剑常磨,见血封喉

    年底了,故事总是会有很多. 刚了一波通宵加班,趁着有时间,过了一遍Vim教程,顺便汇总下常用命令. 对于以 OSX / Linux为开发环境的伙伴们,应该并不陌生.因其轻便,扩展性,可定制化,一直很受 ...

  8. vmware workstation 提示程序包可能有错,错误代码 29141 & 提示不可恢复错误: (vcpu-0)

    问题一:提示程序包可能有错,错误代码 29141 换了n个版本(vmware workstation 10,11, 12),下载了n次,都提示该错误(29141),明明程序包没错啊, 一开始还怀疑是我 ...

  9. Feign禁用Hystrix

    1.完全禁用Hystrix配置yml文件feign.hystrix.enabled=false 2.部分禁用Hystrix2.1.FeignNoHystrixConfigure.java——编写Fei ...

  10. C++中的字符串可以这样换行写

    运行结果: