文章详情

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

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2023-06-25 13:45

关注

这篇文章主要介绍“关于@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; @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;}

测试类:

    @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<Task> 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 对时间进行格式化,返回给前端的将是一个时间戳。如图所示。

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

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

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

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

注意事项

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

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

@DateTimeFormat

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

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

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

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

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

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

这样

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

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

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"接收上述客户端的参数

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

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

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

Mon Apr 01 00:00:00 CST 2019

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

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

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

会报400异常!

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

阅读原文内容投诉

免责声明:

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

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

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯