返回顶部
首页 > 资讯 > 精选 >如何使用@JsonFormat和@DateTimeFormat对Date格式化操作
  • 425
分享到

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

2023-06-20 21:06:30 425人浏览 独家记忆
摘要

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

小编给大家分享一下如何使用@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格式化操作”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网精选频道!

--结束END--

本文标题: 如何使用@JsonFormat和@DateTimeFormat对Date格式化操作

本文链接: https://lsjlt.com/news/300130.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 使用@JsonFormat和@DateTimeFormat对Date格式化操作
    @JsonFormat和@DateTimeFormat对Date格式化 实体类 package com.pojo; import java.util.Date; import c...
    99+
    2024-04-02
  • 如何使用@JsonFormat和@DateTimeFormat对Date格式化操作
    小编给大家分享一下如何使用@JsonFormat和@DateTimeFormat对Date格式化操作,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!@JsonFor...
    99+
    2023-06-20
  • php date格式化时间分钟不对如何解决
    这篇文章主要介绍“php date格式化时间分钟不对如何解决”,在日常操作中,相信很多人在php date格式化时间分钟不对如何解决问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”php date格式化时间分钟...
    99+
    2023-07-05
  • 怎么使用PHP date()函数对日期或时间进行格式化
    要使用PHP的date()函数对日期或时间进行格式化,需要传递两个参数给该函数。第一个参数是日期或时间的格式,第二个参数是要格式化的...
    99+
    2023-10-12
    PHP
  • 如何在MySQL中进行数据转换和格式化操作
    在MySQL中,可以使用内置的函数来进行数据转换和格式化操作。以下是一些常用的函数: CAST() 函数:用于将一个数据类型转换为...
    99+
    2024-03-06
    MySQL
  • Python如何利用%操作符格式化字符串详解
    目录前言1、字符串模板的参数2、格式控制符3、格式化操作符辅助符 总结前言 Python的%操作符可用于格式化字符串,控制字符串的呈现格式。 使用%操作符格式化字符串的模板格式如下:...
    99+
    2024-04-02
  • vscode使用Eslint+Prettier格式化代码的详细操作
    目录 step 1 step 2 step 3 step 4 step 5 最后效果 step 1 1、安装Eslint插件和Prettier插件 2、 安装eslint npm...
    99+
    2024-04-02
  • Vue如何使用$set和$delete操作对象属性
    这篇文章将为大家详细讲解有关Vue如何使用$set和$delete操作对象属性,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、$set在开始讲解$set之前先看下面的一段代码,实现的功能:当点击“添加”...
    99+
    2023-06-29
  • 麒麟操作系统中的磁盘分区和格式化如何进行
    在麒麟操作系统中,磁盘分区和格式化可以通过以下步骤进行:1. 打开“磁盘工具”应用程序。可以通过在“应用程序启动器”中搜索“磁盘”来...
    99+
    2023-10-10
    麒麟操作系统
  • 麒麟操作系统中的磁盘分区和格式化如何实现
    在麒麟操作系统中,磁盘分区和格式化可以通过以下步骤实现:1. 打开磁盘管理工具:在麒麟操作系统中,可以通过图形界面或命令行方式打开磁...
    99+
    2023-10-12
    麒麟操作系统
  • 如何使用ajax操作JavaScript对象
    这篇文章主要讲解了“如何使用ajax操作JavaScript对象”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何使用ajax操作JavaScript对象”...
    99+
    2024-04-02
  • 如何使用 GO SHELL 操作对象?
    Go Shell是一个非常强大的工具,可以让开发者在命令行中快速编写和运行Go代码。在这篇文章中,我将向大家介绍如何使用Go Shell来操作对象,并提供一些演示代码。 首先,我们需要了解一些基本概念。在Go中,对象是指在代码中创建的实体...
    99+
    2023-09-05
    自然语言处理 shell 对象
  • 如何将Java对象序列化成JSON和XML格式
    这篇文章给大家分享的是有关如何将Java对象序列化成JSON和XML格式的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1.先定义一个Java对象Person:public class Pers...
    99+
    2023-05-30
    java
  • 如何使用PHP对日期进行格式化(三种方法)
    在开发网站或应用程序时,往往需要对日期进行格式化。有时候,我们需要把日期从格式如 2021-11-25 的年月日转换成格式如 11/25/2021 的月日年,以适应不同的需求和语言环境。在这篇文章中,我们将介绍如何使用PHP对日期进行格式化...
    99+
    2023-05-14
  • 如何java中使用DecimalFormat实现对数字进行格式化
    这期内容当中小编将会给大家带来有关如何java中使用DecimalFormat实现对数字进行格式化,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。java 使用DecimalFormat进行数字的格式化实例...
    99+
    2023-05-31
    java decimalformat fo
  • 如何使用Black自由格式化Python
    如何使用Black自由格式化Python,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。在我们覆盖 7 个 PyPI 库的系列文章中了解解决 Python 问题的...
    99+
    2023-06-16
  • Go代码格式化gofmt如何使用
    本篇内容介绍了“Go代码格式化gofmt如何使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!gofmt使用对于一门编程语言来说,代码格式化...
    99+
    2023-07-06
  • 如何使用PHP对图片进行处理和操作?
    随着互联网的不断发展,图片已经成为人们在网上交流和传播信息的重要媒介。对于网站开发人员而言,对图片进行处理和操作是十分必要的。在众多的程序设计语言中,PHP是一门十分流行的语言,本文将介绍如何使用PHP对图片进行处理和操作。一、图片上传在网...
    99+
    2023-05-21
    PHP 图片处理 图片操作
  • 使用C#怎么对XML对象进行序列化和反序列化操作
    使用C#怎么对XML对象进行序列化和反序列化操作?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。public class XMLUtil{&n...
    99+
    2023-06-06
  • Java键值对Pair的使用方式和操作流程
    目录 一、什么是键值对 二、Java的Pair 三、Pair 的使用场景   一、什么是键值对 键值对是一种常见的数据结构,它由一个唯一的键(key)和与之关联的值(value)组成。键和值之间存在一种映射关系,通过键可以查找或访问对应...
    99+
    2023-09-17
    java 开发语言 jvm
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作