Java中注解@JsonFormat的用法详解

 更新时间:2023年01月06日 12:04:35   作者:喝汽水的猫^  
这篇文章主要给大家介绍了关于Java中注解@JsonFormat用法的相关资料,以及分享了@JsonFormat 将枚举序列化为对象的方法,文中给出了详细的代码实例,需要的朋友可以参考下

一、@JsonFormat是什么?

通常日期格式都是以时间戳的形式存放在数据库里,当前端页面通过接口查询时,我们会将一个对象的某些属性查出来返回给页面。

类似在实体类上加上改注解:

二、@JsonFormat参数讲解

1.locale代表中国的意思:中国时间段

2.pattern写的就是对于数据库的时间段

  • yyyy代表-年
  • MM代表-月
  • dd代表-日
  • HH代表-时
  • mm代表分
  • ss代表-秒

3.TimeZone

TimeZone 表示时区偏移量,也可以计算夏令时。

在操作 Date, Calendar等表示日期/时间的对象时,经常会用到TimeZone;因为不同的时区,时间不同。

那么timezone加上GMT+8什么意思呢?

GMT 就是格林威治标准时间的英文缩写(Greenwich Mean Time 格林尼治标准时间),是世界标准时间,gmt+8 是格林威治时间+8小时,中国所在时区就是gmt+8 。

附:@JsonFormat 将枚举序列化为对象

Java Enum

@JsonFormat(shape = JsonFormat.Shape.OBJECT)
public enum EmployeeType {
    FullTime("Full Time"), PartTime("Part Time");

    private String displayName;

    EmployeeType(String displayName) {
        this.displayName = displayName;
    }

    public String getDisplayName() {
        return displayName;
    }
}
public class Employee {
    private String name;
    private EmployeeType employeeType;
    ...
}    

Main Class

public class ExampleMain {
    public static void main(String[] args) throws IOException {
        Employee employee = new Employee();
        employee.setName("Amy");
        employee.setEmployeeType(EmployeeType.PartTime);

        System.out.println("-- before serialization --");
        System.out.println(employee);

        System.out.println("-- after serialization --");
        ObjectMapper om = new ObjectMapper();
        String jsonString = om.writeValueAsString(employee);
        System.out.println(jsonString);

        System.out.println("-- after deserialization --");
        System.out.println(om.readValue(jsonString, Employee.class));
    }
}

枚举被序列化为了 JSON 对象,但无法反序列化。

-- before serialization --
Employee{name='Amy', employeeType=PartTime}
-- after serialization --
{"name":"Amy","employeeType":{"displayName":"Part Time"}}
-- after deserialization --
Exception in thread "main" com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize value of type `org.example.c27.EmployeeType` from Object value (token `JsonToken.START_OBJECT`)
 at [Source: (String)"{"name":"Amy","employeeType":{"displayName":"Part Time"}}"; line: 1, column: 30] (through reference chain: org.example.c27.Employee["employeeType"])
	at com.fasterxml.jackson.databind.exc.MismatchedInputException.from(MismatchedInputException.java:59)
	at com.fasterxml.jackson.databind.DeserializationContext.reportInputMismatch(DeserializationContext.java:1601)
	at com.fasterxml.jackson.databind.DeserializationContext.handleUnexpectedToken(DeserializationContext.java:1375)
	at com.fasterxml.jackson.databind.DeserializationContext.handleUnexpectedToken(DeserializationContext.java:1280)
	at com.fasterxml.jackson.databind.DeserializationContext.extractScalarFromObject(DeserializationContext.java:872)
	at com.fasterxml.jackson.databind.deser.std.EnumDeserializer.deserialize(EnumDeserializer.java:199)
	at com.fasterxml.jackson.databind.deser.impl.MethodProperty.deserializeAndSet(MethodProperty.java:129)
	at com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:324)
	at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:187)
	at com.fasterxml.jackson.databind.deser.DefaultDeserializationContext.readRootValue(DefaultDeserializationContext.java:322)
	at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4593)
	at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3548)
	at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3516)
	at org.example.c27.ExampleMain.main(ExampleMain.java:28)

Process finished with exit code 1

不使用 @JsonFormat

-- before serialization --
Employee{name='Amy', employeeType=PartTime}
-- after serialization --
{"name":"Amy","employeeType":"PartTime"}
-- after deserialization --
Employee{name='Amy', employeeType=PartTime}

总结 

到此这篇关于Java中注解@JsonFormat用法的文章就介绍到这了,更多相关Java注解@JsonFormat内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java用POI导入导出Excel实例分析

    Java用POI导入导出Excel实例分析

    在本篇文章里小编给大家整理的是一篇关于Java用POI导入导出Excel实例分析内容,有需要的朋友们可以跟着学习下。
    2021-11-11
  • 学Java做项目需要学习的一些技能

    学Java做项目需要学习的一些技能

    这篇文章主要介绍了学Java做项目需要学习的一些技能,例如JavaSE、Servlet、JSP等,总结了他们中需要学习的东西,都是一些经验总结,需要的朋友可以参考下
    2014-07-07
  • My eclipse 端口占用(9360)问题解决办法

    My eclipse 端口占用(9360)问题解决办法

    这篇文章主要介绍了My eclipse 工程发布时出现端口占用问题解决办法的相关资料,需要的朋友可以参考下
    2016-12-12
  • 基于java线程池读取单个SQL数据库表

    基于java线程池读取单个SQL数据库表

    这篇文章主要为大家详细介绍了基于java线程池读取单个SQL数据库表,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-08-08
  • java对象与json对象间的相互转换的方法

    java对象与json对象间的相互转换的方法

    本篇文章主要介绍了java对象与json对象间的相互转换的方法,详细介绍了json字符串和java对象相互转换,有兴趣的可以了解一下
    2017-01-01
  • Spring Profiles使用方法详解

    Spring Profiles使用方法详解

    在你刚接触SpringBoot的时候有没有对它提供的Profile有些许不适应,经过摸索后才领悟到它的强大。今天我就对Profile进行一点归纳总结,留作互联网记忆
    2022-12-12
  • javaNIO中关于ByteBuffer的用法

    javaNIO中关于ByteBuffer的用法

    这篇文章主要介绍了javaNIO中关于ByteBuffer的用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-08-08
  • Liquibase 在 Spring Boot 中的使用详细介绍

    Liquibase 在 Spring Boot 中的使用详细介绍

    Liquibase 提供了灵活的变更集机制,支持创建表、修改列、填充数据、回滚变更等多种操作,本文将通过多个丰富的示例,详细讲解如何在 Spring Boot项目中使用 Liquibase,感兴趣的朋友跟随小编一起看看吧
    2024-12-12
  • Spring Security无法调用接口错误的问题解决

    Spring Security无法调用接口错误的问题解决

    记录一下之前在写程序的时候遇到的问题,Spring Security无法调用接口错误的问题,本文就来介绍一下解决方法,感兴趣的可以了解一下
    2023-08-08
  • Spring Data Jpa 复合主键的实现

    Spring Data Jpa 复合主键的实现

    这篇文章主要介绍了Spring Data Jpa 复合主键的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-04-04

最新评论