最近做项目时,同事写的功能总是格式化时间不正确,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. 【金三银四跳槽季】Java工程师如何在1个月内做好面试准备?

    目录 一.写在前面 二.技术广度的快速准备 三.技术深度的快速准备 四.基础功底的快速准备 五.下篇预告 一.写在前面 春节长假转眼已过,即将迎来的是一年一度的金三银四跳槽季. 假如你准备在金三银四跳 ...

  2. MySQL:索引

    索引的目的在于提高查询效率,它的作用就相当于一本书的目录: 1. 常见的索引模型 1.1 哈希表 优点:适用于等值查询的场景: 缺点:范围查询效率较低: 1.2 有序数组 优点:范围查询和等值查询效率 ...

  3. python中ones的含义和用法

    ones是numpy的一个内置函数,作用是生成参数为一的数组.英文解释: Return a new array of given shape and type, filled with ones. 例 ...

  4. Tools - 浏览器Chrome

    Chrome HomePage:https://www.google.com/chrome/ Chrome应用商店:https://chrome.google.com/webstore/categor ...

  5. 08-部署node节点

    部署kubernetes node节点 kubernetes node 节点包含如下组件: Flanneld: 省略,参照之前部署的文档 Docker1.12.5: 省略,参照之前部署的文档 kube ...

  6. 用eclipse导入打war包的maven项目

    最近遇到Maven管理下的Spring MVC项目,组内某位将项目代码扔过来,一脸懵逼(囧),查阅了一些资料后终于将此项目运行通了(>_<),特此记录下来与各位分享. 通俗的来说,Mave ...

  7. Java内部类持有外部类的引用详细分析与解决方案

    在Java中内部类的定义与使用一般为成员内部类与匿名内部类,他们的对象都会隐式持有外部类对象的引用,影响外部类对象的回收. GC只会回收没有被引用或者根集不可到达的对象(取决于GC算法),内部类在生命 ...

  8. mysql 开发进阶篇系列 25 数据库RPM安装目录介绍

    一.概述 mysql可以在多个平台上运行,在windows平台上安装有noinstall包和图形化包二种方式.在linux/unix平台上有RPM包安装,二进制包(Binary Package)安装, ...

  9. springboot属性注入转化为对象

    第一种方式:用spel表达式解析 @Value("#{ T(com.alibaba.fastjson.JSON).parseObject('${train.purchase}')}" ...

  10. PostgreSQL事务实现

    事务简介 事务管理器:有限状态机 日志管理器 CLOG:事务的执行结果 XLOG:undo/redo日志 锁管理器:实现并发控制,读阶段采用MVCC,写阶段采用锁控制实现不同的隔离级别 Postgre ...