千家信息网

关于@JSONField和@JsonFormat的使用区别有哪些

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,这篇文章主要介绍"关于@JSONField和@JsonFormat的使用区别有哪些",在日常操作中,相信很多人在关于@JSONField和@JsonFormat的使用区别有哪些问题上存在疑惑,小编查阅
千家信息网最后更新 2026年11月02日关于@JSONField和@JsonFormat的使用区别有哪些

这篇文章主要介绍"关于@JSONField和@JsonFormat的使用区别有哪些",在日常操作中,相信很多人在关于@JSONField和@JsonFormat的使用区别有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"关于@JSONField和@JsonFormat的使用区别有哪些"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

@JSONField和@JsonFormat的区别

@JSONField是阿里巴巴下fastjson下的,@JsonFormat是jackson下面的。

一、@JSONField的常用方式

1.1、name的用法:

实体类:

package com.xiaobu.entity; import com.alibaba.fastjson.annotation.JSONField;import lombok.Data; import javax.persistence.*;import java.io.Serializable; /** * @author xiaobu * @version JDK1.8.0_171 * @date on  2018/12/4 19:00 * @description V1.0 */@Datapublic class Roles implements Serializable {    private static final long serialVersionUID = 5775171105018867238L;     @JSONField(name = "role_id")    @Column(name = "RoleId")    private Integer RoleId;     @JSONField(name = "role_desc")    @Column(name = "RoleDesc")    private String RoleDesc;}

测试类:

/**     * @author xiaobu     * @date 2018/12/5 16:53     * @descprition  表明  json不区分大小写都能转换     * @version 1.0     * bean to JSON:{"role_desc":"admin","role_id":8}     * 需要转换的json:{"ROLE_DESC":"ADMIN","ROLE_ID":8}     * RoleDesc:ADMIN     */    @Test    public void testJSONField(){        Roles roles = new Roles();        roles.setRoleDesc("admin");        roles.setRoleId(8);        String jsonStr=JSONObject.toJSONString(roles);        System.out.println("bean to JSON:"+jsonStr);        //改变json的key为大写        jsonStr = jsonStr.toUpperCase();        System.out.println("需要转换的json:" + jsonStr);        roles = JSONObject.toJavaObject(JSONObject.parseObject(jsonStr), Roles.class);        System.out.println("RoleDesc:"+roles.getRoleDesc());    }

1.2 format的用法:

实体类:

 /**     * 任务接收时间     */    @JsonFormat(pattern = "yyyy-MM-dd",timezone = "GMT+8")    @JSONField(format = "yyyy-MM-dd")    @Column(name="TaskAcceptTime")    private Date TaskAcceptTime;     /**     *任务完成时间     */    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")    @JSONField(format = "yyyy-MM-dd")    @Column(name="TaskCompleteTime")    private Date TaskCompleteTime;

测试类:

@Test    public void findByExample() {        Task task = new Task();        task.setTaskId("HYR08274-0804");        Example example = new Example(Task.class);        Example.Criteria criteria = example.createCriteria();        if (StringUtils.isNotBlank(task.getTaskId())) {            criteria.andLike("TaskId", "%" + task.getTaskId() + "%");        }        //TaskAcceptTime=Mon Aug 04 00:00:00 CST 2008,TaskCompleteTime=Fri Nov 07 00:00:00 CST 2008        List tasks = taskMapper.selectByExample(example);        System.out.println(tasks);        //""taskAcceptTime":"2008-08-04","taskCompleteTime":"2008-11-07"        String fastJsonStr = JSON.toJSONString(tasks);        System.out.println("fastJsonStr = " + fastJsonStr);        ObjectMapper MAPPER = new ObjectMapper();        try {            //""TaskAcceptTime":"2008-08-04","TaskCompleteTime":"2008-11-07 00:00:00"            String ujosn = MAPPER.writeValueAsString(tasks);            System.out.println("ujosn = " + ujosn);        } catch (JsonProcessingException e) {            e.printStackTrace();        }     }

@JsonFormat(pattern = "yyyy-MM-dd",timezone = "GMT+8") 必须加上时区。

@JSONField(format = "yyyy-MM-dd")

这两个的作用都是格式化日期时间。且只能作用在日期时间上。

补充:前台传后台

@DateTimeFormat(pattern="yyyy-MM-dd")

@JsonFormat与@DateTimeFormat用法及注意事项

@JsonFormat

@JsonFormat ,使用该注解前需要添加 jackson 相关的依赖包

用于服务器传给前端json数据时对Date类型时间进行的格式化

@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")

pattern就表示需要转变的格式,timezone表示处在的时区(国内是东八区)

因为,jackson在序列化时间时是按照国际标准时间GMT进行格式化的,而在国内默认时区使用的是CST时区,两者相差8小时

如果没有用@JsonFormat 对时间进行格式化,返回给前端的将是一个时间戳。如图所示。

使用了@JsonFormat之后,时间格式正确显示。如图所示。

@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")

注意事项

@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")

pattern中定义的格式的大小写要注意,不要写错。。。

@DateTimeFormat

@DateTimeFormat是spring的注解,spring工程下不在需要额外引入其他依赖

由于客户端传给服务端的时间参数是字符串类型,如果直接使用java.util.Date下的Date接受的话,会报400的异常(400异常表示服务器不处理该请求,多半是传入的参数问题)

可以使用@DateTimeFormat将客户端发送过来的时间参数转换成想要的类型

@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")

pattern定义需要转换的格式(跟前面一样。大小写需要严格定义)

这样

服务端就可以正确接收,打印的时间参数为

Mon Apr 01 16:26:25 CST 2019

注意:@JsonFormat与@DateTimeFormat只是定义时间参数在客户端和服务端之间转换格式,控制台、Debug显示的还是java.util.Date下的Date类型形式,如果想要转换的话可以自己使用SimpleDateFormat

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

一些特殊情况

如果使用pattern = "yyyy-MM-dd"接收上述客户端的参数

@DateTimeFormat(pattern = "yyyy-MM-dd")

这样也能正确接收到,但是会将时分秒全部置为00

Mon Apr 01 00:00:00 CST 2019

如果使用pattern = "yyyy-MM-dd HH:mm:ss"接收客户端传来的没有时分秒的参数

@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")

会报400异常!

到此,关于"关于@JSONField和@JsonFormat的使用区别有哪些"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

时间 格式 参数 客户 服务 客户端 时区 类型 学习 大小 事项 任务 作用 前端 实体 日期 时分 更多 服务器 注意事项 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网佳科技有限公司 中国互联网科技工作委员会毛军 北京互联网络科技有限公司 小马过河互联网科技 伴你行互联网科技有限公司 天速互联网络科技有限公司 福州新华互联网科技学校 知乎 贵州叶脉互联网科技有限公司所属行业 互联网公司科技股 互联网科技与大数据专业 科技类公司包括互联网吗 浙南科技城互联网大厦建设工程 如何创新互联网科技 南博望互联网科技有限公司 中天科技中国工业互联网 扫呗互联网科技有限公司 科技互联网专业工作会议发言稿 东风日产互联网科技公司叫什么 互联网科技自媒体灵感 互联网科技快速发展优美句子 互联网金融 科技 科技服务与互联网 互联网科技股票 凡科互联网科技 互联网科技缩写 上海万想互联网科技 中国互联网金融科技基金 互联网和黑科技的看法 互联网营销推广黑科技 35岁以上互联网科技行业
0