我的编程空间,编程开发者的网络收藏夹
学习永远不晚

如何使用@JsonFormat和@DateTimeFormat对Date格式化操作

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

如何使用@JsonFormat和@DateTimeFormat对Date格式化操作

小编给大家分享一下如何使用@JsonFormat和@DateTimeFormat对Date格式化操作,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

@JsonFormat和@DateTimeFormat对Date格式化

实体类

package com.pojo;import java.util.Date;import com.fasterxml.jackson.annotation.JsonFormat;    public class User {     private Long id;     private String username;//用户名     private String password;//密码     private String phone;//手机号     private String email;//邮箱     private Date created;//创建日期     private Date updated;//修改日期      public Long getId() { return id; }     public void setId(Long id) { this.id = id;}      public String getUsername() {return username;}     public void setUsername(String username) {this.username = username;}      public String getPassword() { return password;}     public void setPassword(String password) { this.password = password;}      public String getPhone() { return phone;}     public void setPhone(String phone) {this.phone = phone;}      public String getEmail() {return email;}     public void setEmail(String email) { this.email = email;}      public Date getCreated() {return created;}     public void setCreated(Date created) {this.created = created;}         public Date getUpdated() {return updated;}     public void setUpdated(Date updated) {this.updated = updated;} }

一、@JsonFormat

控制器:

@RequestMapping("/getdate") @ResponseBody public TbUser getdate() {  TbUser user = new TbUser();  user.setId(1001l);  user.setUsername("zhangsan");  user.setPassword("1234567");  user.setPhone("15225969681");  user.setEmail("123@qq.com");  user.setUpdated(new Date());  user.setCreated(new Date());  return user; }

访问控制器在浏览器中输出的json格式如下:

{"id":1001,"username":"zhangsan","password":"1234567","phone":"15212559252","email":"123@qq.com","created":1545288773904,"updated":"1545288773904"}

可见created、updated这两个属性值是时间戳并不是“yyyy-MM-dd HH:mm:ss”格式,那怎么把日期类型格式化成我们想要的类型呢,其实很简单只需要在实体类的属性上加上**@JsonFormat**注解就行了。

@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") private Date created; @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") private Date updated;
@JsonFormat(pattern=“yyyy-MM-dd”,timezone = “GMT+8”)

**pattern:**是你需要转换的时间日期的格式

**timezone:**是时间设置为东八区(北京时间)

提示:@JsonFormat注解可以在属性的上方,同样可以在属性对应的get方法上,两种方式没有区别。

再次访问控制器,会发现在浏览器中输出的json格式就会变成我们指定的时间格式了。如下:

{"id":1001,"username":"zhangsan","password":"1234567","phone":"15225969681","email":"123@qq.com","created":2018-12-19 19:00:11,"updated":"2018-12-19 19:00:11"}

加上注解后将User对象转为json字符串时也是会按照注解中的格式进行转换

二、@DateTimeFormat

Index.jsp

<%@ page language="java" contentType="text/html; charset=utf-8"pageEncoding="utf-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><title>测试</title></head><body><form method="post" action="/getuser">用户名:<input type="text" name="username"/></br>密码:<input type="password" name="password"/></br>手机:<input type="text" name="phone"/></br>邮箱:<input type="text" name="email"/></br>创建日期:<input type="datetime" name="created"/></br>修改日期:<input type="datetime" name="updated"/></br><input type="submit" /></form></body></html>
@RequestMapping(value="/getuser", method=RequestMethod.POST)@ResponseBodypublic TbUser getuser(TbUser user) { System.out.println("-------------------------------"); System.out.println(user.toString()); System.out.println("-------------------------------"); return user;}

如何使用@JsonFormat和@DateTimeFormat对Date格式化操作

当User实体类created、updated不加注解 @DateTimeFormat(pattern = “yyyy-MM-dd”) 时可以输入任意格式的日期如yyyy-MM-dd、yyyy/MM/dd…,后台仍会将接收到的字符串转换为Date,但如果加上@DateTimeFormat注解就只能按照注解后面的日期格式进行输入了。

当User实体类created、updated不加注解 @DateTimeFormat(pattern = “yyyy-MM-dd”) 时可以输入任意格式的日期如yyyy-MM-dd、yyyy/MM/dd…,后台仍会将接收到的字符串转换为Date,但如果加上@DateTimeFormat注解就只能按照注解后面的日期格式进行输入了。

@DateTimeFormat(pattern = "yyyy-MM-dd")@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")private Date created;@DateTimeFormat(pattern = "yyyy-MM-dd")@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")private Date updated;

控制台输出结果如下:

User [id=null, username=test, password=123, phone=12345678901, email=12112@qq.com, created=Thu Dec 20 00:00:00 CST 2012, updated=Thu Dec 20 00:00:00 CST 2012]

总结:

注解**@JsonFormat**:主要是控制后台到前台的时间格式

注解**@DateTimeFormat**:主要是限制前台到后台的时间格式

顺便分享一个json和Object互转的工具类,源码如下:
package com.common.utils;import java.util.List;import com.fasterxml.jackson.core.JsonProcessingException;import com.fasterxml.jackson.databind.JavaType;import com.fasterxml.jackson.databind.ObjectMapper;public class JsonUtils {    // 定义jackson对象    private static final ObjectMapper MAPPER = new ObjectMapper();        public static String objectToJson(Object data) {     try {   String string = MAPPER.writeValueAsString(data);   return string;  } catch (JsonProcessingException e) {   e.printStackTrace();  }     return null;    }            public static <T> T jsonToPojo(String jsonData, Class<T> beanType) {        try {            T t = MAPPER.readValue(jsonData, beanType);            return t;        } catch (Exception e) {         e.printStackTrace();        }        return null;    }            public static <T>List<T> jsonToList(String jsonData, Class<T> beanType) {     JavaType javaType = MAPPER.getTypeFactory().constructParametricType(List.class, beanType);     try {      List<T> list = MAPPER.readValue(jsonData, javaType);      return list;  } catch (Exception e) {   e.printStackTrace();  }     return null;    }}

Json Date日期格式化以及字段过滤

json 数据的日期格式化一直都是一个问题,没有能够按照自己想要的格式格式化的方法或者工具,所以把自己用过的整理一下.

引入jar包:

jackson-all-1.8.5.jar 不一定固定这个版本.

org.codehaus.jackson.map.ObjectMapper.class 需要导入这个转换对象.

maven依赖:版本自适配

<dependency>    <groupId>com.alibaba</groupId>    <artifactId>fastjson</artifactId>    <version>1.2.15</version></dependency>

Null转空串""

// Date日期格式化ObjectMapper mapper = new ObjectMapper();mapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));// 将null替换为""mapper.getSerializerProvider().setNullValueSerializer(new JsonSerializer<Object>() { @Override public void serialize(Object obj, JsonGenerator jg, SerializerProvider sp)  throws IOException, JsonProcessingException {  jg.writeString(""); // Null 值转 “”(String串) }});

实现json字段的过滤:

// 只保留包含的字段// 实现自定义字段保留filterOutAllExcept,过滤serializeAllExceptmapper.setFilters(new SimpleFilterProvider().addFilter(ReportLoss.class.getName(), SimpleBeanPropertyFilter.serializeAllExcept("id", "title")));mapper.setAnnotationIntrospector(new JacksonAnnotationIntrospector(){ @Override public Object findFilterId(AnnotatedClass ag) {  return ag.getName(); }});

格式化后的结果获取:

// 得到格式化后的json数据String asString = mapper.writeValueAsString(queryActiveList);

注解的释义:

注解使用:(对象)

字段注解过滤

@JsonIgnore属性上 或者 @JsonIgnoreProperties({"createTime","valid"})实体类上

@JsonProperty("idName")更改字段名,属性上

// 过滤对象的null属性.mapper.setSerializationInclusion(Inclusion.NON_NULL);// 过滤map中的null值mapper.configure(Feature.WRITE_NULL_MAP_VALUES, false);

json转map:

//JSONObject转Map<String, Object>@SuppressWarnings("unchecked")private Map<String, Object> getJsonToMap(JSONObject json) { Map<String,Object> map = new HashMap<String, Object>(); try {  ObjectMapper mapper = new ObjectMapper();  map = mapper.readValue(json.toString(), Map.class); } catch (Exception e) {  e.printStackTrace(); } return map;}

为了方便,整理了一份工具类:JsonDMOUtil.java

JsonDMOUtil.java (json日期格式化以及转换工具类)

import com.alibaba.fastjson.JSON;import com.alibaba.fastjson.JSONObject;import com.fasterxml.jackson.core.JsonGenerator;import com.fasterxml.jackson.databind.JsonSerializer;import com.fasterxml.jackson.databind.ObjectMapper;import com.fasterxml.jackson.databind.SerializerProvider;import java.io.IOException;import java.text.SimpleDateFormat;import java.util.HashMap;import java.util.Map;import java.util.Map.Entry;public class JsonDMOUtil {        public static String jsonDateFormate(Object object, String dateFormate) {        String asString = "";        try {            // Date日期格式化            if ("".equals(dateFormate.trim()) || dateFormate == null) {                dateFormate = "yyyy-MM-dd HH:mm:ss";            }            ObjectMapper mapper = JsonDMOUtil.getObjectMapper(dateFormate);            // 得到格式化后的json数据            asString = mapper.writeValueAsString(object);        } catch (Exception e) {            e.printStackTrace();        }        return asString;    }        public static JSONObject jsonDTOFormate(Object object, String dateFormate) {        String asString = "";        try {            // Date日期格式化            if ("".equals(dateFormate.trim()) || dateFormate == null) {                dateFormate = "yyyy-MM-dd HH:mm:ss";            }            ObjectMapper mapper = JsonDMOUtil.getObjectMapper(dateFormate);            // 得到格式化后的json数据            asString = mapper.writeValueAsString(object);        } catch (Exception e) {            e.printStackTrace();        }        return JSON.parseObject(asString);    }        @SuppressWarnings("unchecked")    public static Map<String, String> jsonDTMFormate(Object object, String dateFormate) {        Map<String, String> resultMap = new HashMap<String, String>();        try {            JSONObject jsonObj = JSON.parseObject(object.toString());            // Date日期格式化            if ("".equals(dateFormate.trim()) || dateFormate == null) {                dateFormate = "yyyy-MM-dd HH:mm:ss";            }            ObjectMapper mapper = JsonDMOUtil.getObjectMapper(dateFormate);            JSONObject header = jsonObj.getJSONObject("header");            JSONObject body = jsonObj.getJSONObject("body");            Map<String, String> headerMap = null;            Map<String, String> bodyMap = null;            if (header != null) {                headerMap = mapper.readValue(header.toString(), Map.class);                for (Entry<String, String> map : headerMap.entrySet()) {                    resultMap.put(map.getKey(), map.getValue());                }            }            if (body != null) {                bodyMap = mapper.readValue(body.toString(), Map.class);                for (Entry<String, String> map : bodyMap.entrySet()) {                    resultMap.put(map.getKey(), map.getValue());                }            }            if (resultMap.isEmpty()) {                resultMap = mapper.readValue(jsonObj.toString(), Map.class);            }        } catch (Exception e) {            e.printStackTrace();        }        return resultMap;    }        public static String jsonDateFormate(Object object) {        String asString = "";        try {            // Date日期格式化            ObjectMapper mapper = JsonDMOUtil.getObjectMapper("yyyy-MM-dd HH:mm:ss");            asString = mapper.writeValueAsString(object);        } catch (Exception e) {            e.printStackTrace();        }        return asString;    }        public static JSONObject jsonDTOFormate(Object object) {        String asString = "";        try {            // Date日期格式化            ObjectMapper mapper = JsonDMOUtil.getObjectMapper("yyyy-MM-dd HH:mm:ss");            asString = mapper.writeValueAsString(object);        } catch (Exception e) {            e.printStackTrace();        }        return JSON.parseObject(asString);    }        @SuppressWarnings("unchecked")    public static Map<String, String> jsonDTMFormate(Object object) {        Map<String, String> resultMap = new HashMap<String, String>();        try {            JSONObject jsonObj = JSON.parseObject(object.toString());            // Date日期格式化            ObjectMapper mapper = JsonDMOUtil.getObjectMapper("yyyy-MM-dd HH:mm:ss");            JSONObject header = jsonObj.getJSONObject("header");            JSONObject body = jsonObj.getJSONObject("body");            Map<String, String> headerMap = null;            Map<String, String> bodyMap = null;            if (header != null) {                headerMap = mapper.readValue(header.toString(), Map.class);                for (Entry<String, String> map : headerMap.entrySet()) {                    resultMap.put(map.getKey(), map.getValue());                }            }            if (body != null) {                bodyMap = mapper.readValue(body.toString(), Map.class);                for (Entry<String, String> map : bodyMap.entrySet()) {                    resultMap.put(map.getKey(), map.getValue());                }            }            if (resultMap.isEmpty()) {                resultMap = mapper.readValue(jsonObj.toString(), Map.class);            }        } catch (Exception e) {            e.printStackTrace();        }        return resultMap;    }        private static ObjectMapper getObjectMapper(String dateFormate) {        // Date日期格式化        ObjectMapper mapper = new ObjectMapper();        mapper.setDateFormat(new SimpleDateFormat(dateFormate));        // 将null替换为""        mapper.getSerializerProvider().setNullValueSerializer(new JsonSerializer<Object>() {            @Override            public void serialize(Object obj, JsonGenerator jg, SerializerProvider sp)                    throws IOException {                jg.writeString(""); // Null 值转 “”(String串)            }        });        return mapper;    }}

以上是“如何使用@JsonFormat和@DateTimeFormat对Date格式化操作”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网行业资讯频道!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

如何使用@JsonFormat和@DateTimeFormat对Date格式化操作

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

如何使用@JsonFormat和@DateTimeFormat对Date格式化操作

小编给大家分享一下如何使用@JsonFormat和@DateTimeFormat对Date格式化操作,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!@JsonFor
2023-06-20

如何在MySQL中进行数据转换和格式化操作

在MySQL中,可以使用内置的函数来进行数据转换和格式化操作。以下是一些常用的函数:CAST() 函数:用于将一个数据类型转换为另一个数据类型。例如,将一个字符串转换为整数或将一个日期转换为字符串。SELECT CAST('123
如何在MySQL中进行数据转换和格式化操作
2024-03-06

Vue如何使用$set和$delete操作对象属性

这篇文章将为大家详细讲解有关Vue如何使用$set和$delete操作对象属性,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、$set在开始讲解$set之前先看下面的一段代码,实现的功能:当点击“添加”
2023-06-29

麒麟操作系统中的磁盘分区和格式化如何进行

在麒麟操作系统中,磁盘分区和格式化可以通过以下步骤进行:1. 打开“磁盘工具”应用程序。可以通过在“应用程序启动器”中搜索“磁盘”来找到它。2. 在磁盘工具中,选择要分区和格式化的磁盘。在侧边栏中,您将看到所有可用的磁盘和分区。3. 如果磁
2023-10-10

麒麟操作系统中的磁盘分区和格式化如何实现

在麒麟操作系统中,磁盘分区和格式化可以通过以下步骤实现:1. 打开磁盘管理工具:在麒麟操作系统中,可以通过图形界面或命令行方式打开磁盘管理工具,例如“gnome-disks”或“fdisk”。2. 选择磁盘:在磁盘管理工具中,选择要分区和格
2023-10-12

如何java中使用DecimalFormat实现对数字进行格式化

这期内容当中小编将会给大家带来有关如何java中使用DecimalFormat实现对数字进行格式化,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。java 使用DecimalFormat进行数字的格式化实例
2023-05-31

隐式和显式操作符如何在C#项目中使用

隐式和显式操作符如何在C#项目中使用?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。什么是显式,什么是隐式隐式类型转换 它是运行时自动帮你完成的,言外之意就是你不需要人为干预
2023-06-14

PHP中如何使用对象-关系映射(ORM)简化数据库操作?

使用 orm 可简化 php 中的数据库操作,它将对象映射到关系数据库中。laravel 中的 eloquent orm 允许使用面向对象的语法与数据库交互,可通过定义模型类、使用 eloquent 方法或在实战中构建博客系统等方式来使用
PHP中如何使用对象-关系映射(ORM)简化数据库操作?
2024-05-07

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录