@DateTimeFormat与@JsonFormat不完全解析

news2024/12/23 11:09:02

目录

    • 前言
    • 测试代码
    • @DateTimeFormat
      • 不加任何注解的情况
      • 普通请求
      • JSON请求
    • @JsonFormat
      • 普通请求
      • JSON请求
    • 其他方式(@InitBinder)
    • 结论
    • 源码地址

前言

  • 一直以来对@DateTimeFormat@JsonFormat 比较模糊,容易搞忘,今天就做个笔记,由于不设计原理,源码所以是不完全解析,有时间再看下源码。
  • 如果时间急的,可以不看验证过程,直接看结论

测试代码

  • 下面是基本代码:
  • 实体类
public class User {

    public final static String YYYY_MM_DD_HH_MM_SS = "yyyy-MM-dd HH:mm:ss";

    private String name;

    private Date birthday;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Date getBirthday() {
        return birthday;
    }

    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }
}

  • controller
@RestController
public class TestController {

    @RequestMapping("/test")
    public User test(User user){
        return user;
    }
}

@DateTimeFormat

不加任何注解的情况

  • 我使用postman传递birthday参数不成功。

在这里插入图片描述
在这里插入图片描述

  • 取消birthday正常。
    在这里插入图片描述

普通请求

  • 那我们加上@DateTimeFormat看看。
   @DateTimeFormat(pattern = YYYY_MM_DD_HH_MM_SS)
    private Date birthday;
  • 加入之后GET/POST都成功
    在这里插入图片描述

在这里插入图片描述

JSON请求

  • 再来测试请求参数是json的情况。
   @RequestMapping("/test")
    public User test(@RequestBody User user){
        return user;
    }
  • 先单独尝试name参数,以免干扰。

在这里插入图片描述

  • name参数成功,再加上birthday参数,有异常,传JSON不行。

在这里插入图片描述

@JsonFormat

普通请求

  • 代码
 @JsonFormat(pattern = YYYY_MM_DD_HH_MM_SS)
    private Date birthday;
  • 普通请求报错

在这里插入图片描述
在这里插入图片描述

JSON请求

  • 改下controller
   @RequestMapping("/test")
    public User test(@RequestBody User user){
        return user;
    }
  • 测试结果正常
    在这里插入图片描述
  • 注意:Spring框架默认序列化框架用Jackson,所以你没改序列化框架的话,加了@JsonFormat还具备格式化返回值的能力

其他方式(@InitBinder)

  • 新增一个BaseController,TestController 继承BaseController
public class BaseController {

    /**
     * 将前台传递过来的日期格式的字符串,自动转化为Date类型
     */
    @InitBinder
    public void initBinder(WebDataBinder binder)
    {
        // Date 类型转换
        binder.registerCustomEditor(Date.class, new PropertyEditorSupport()
        {
            @Override
            public void setAsText(String text)
            {
                setValue(DateUtils.parseDate(text));
            }
        });


    }

}



@RestController
public class TestController extends BaseController {

    @RequestMapping("/test")
    public User test(User user){
        return user;
    }
}

  • 这样它也能获得普通请求接收时间的能力。
    在这里插入图片描述
  • 不过JSON请求报错。
  • 在这里插入图片描述

在这里插入图片描述

结论

  • @DateTimeFormat适用于普通请求方式,JSON请求方式报错。
  • @JsonFormat 适用于JSON请求方式,普通请求报错。
  • 注意:Spring框架默认序列化框架用Jackson,所以你没改序列化框架的话,加了@JsonFormat还具备格式化返回值的能力
  • @InitBinder这种方式需要自己写点代码,效果与 @DateTimeFormat雷同,适用于普通请求方式,JSON请求方式报错。

源码地址

  • https://github.com/1030907690/spring-boot-kubernetes/tree/v1.0.3 @DateTimeFormat与@JsonFormat 测试

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/671819.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【MySQL 利器之 mysqldump】

文章目录 前言一、mysqldump二、环境三、使用步骤1.服务器与服务器间直接同步2.导出到sql文件3.sql文件导入 总结使用方式 1 服务器间直连方式同步:使用中间SQL 文件方式:datax: 前言 1.随着服务器环境改造,新旧数据库环境更换&a…

微流控压力控制器和微流控注射泵的性能比较

摘要:针对微流控技术中的压力和流量控制,本文介绍了目前常用的两类装置:注射泵和压力泵,重点介绍了这两种装置的性能特点,并对这两种压力控制装置进行了简要的分析对比。分析结论是压力泵将逐渐替代注射泵的应用&#…

Addressable CRC设置详解

设置 Asset Bundle的CRC设置中有三个选项: Disable; Enable,InClude Cached; Enable,Excludeing Cached; 修改后实际改的是这里的选项: Disable 设置为Disable,实际上是将BundledAssetGroupSchema类的UseAssetBundleCrc参数设…

软考:软件工程:软件设计,总体设计,详细设计,耦合内聚流程图,NS图,PAD图,判定树判定图。

软考:软件工程: 提示:系列被面试官问的问题,我自己当时不会,所以下来自己复盘一下,认真学习和总结,以应对未来更多的可能性 关于互联网大厂的笔试面试,都是需要细心准备的 (1&#…

【吃透网络安全】2023软考网络管理员考点网络安全(二)网络攻击详解

涉及知识点 黑客的攻击手段介绍,常见的网络攻击,软考网络管理员常考知识点,软考网络管理员网络安全,网络管理员考点汇总。 后面还有更多续篇希望大家能给个赞哈,这边提供个快捷入口! 第一节网络管理员考…

多版本管理node.js

多版本管理node.js 1. 安装2. 配置使用2.1 修改node源2.2 常用命令 在Windows 计算机上管理node.js的多个安装版本。 这是朋友推荐的,就是自己在升级node的时候给搞崩了, 不得不提升效率,于是发现了这个好工具,可以反过来理解&…

金蝶云星空RCE漏洞复现

0x01 产品简介 金蝶云星空是一款云端企业资源管理(ERP)软件,为企业提供财务管理、供应链管理以及业务流程管理等一体化解决方案。金蝶云星空聚焦多组织,多利润中心的大中型企业,以 “开放、标准、社交”三大特性为数字…

端午安康,节日送祝福

端午节是在中国农历的五月份,今年是(公历)6月22日,它是中国最古老的节日 之一,已经有两千多年的历史。The Duanwu or Dragon Boat Festival, is generally celebrated on the fifth month of the Chinese l…

(自定义包导包失败一万次的经验)ModuleNotFoundError: No module named ‘xxx‘

导自定义的包遇到的问题 首先我列一下我的目录结构 |-src|-__init__.py|-Dao|-insertData.py|-pojo|-DataBaseDao|-everyData我现在在我的insertData.py通过from src.pojo import DataBaseDao,everyData导包,在pycharm中可以正常运行,但是在控制台运行失败,提示 ModuleNotFo…

移植微雪例程-2.6寸双色墨水屏到ESP32IDF中

微雪官网:E-Paper ESP32 Driver Board - Waveshare Wiki 去微雪官网,把墨水屏的例程下下来。 我这个使用的是2.6寸的双色墨水屏。 下载下来之后,然后移植到IDF上面。 移植epd2in13bc-demo这个例程。将EPD_2in13bc.h这个头文件中的宽&#…

2022年广西壮族自治区第二届职业技能大赛“网络安全项目”比赛任务书

2022年广西壮族自治区第二届职业技能大赛 “网络安全项目”比赛任务书 一、竞赛时间 总计:12小时 竞赛阶段 竞赛阶段 任务阶段 竞赛任务 竞赛时间 分值 A A-1 登录安全加固 240分钟 350分 A-2 本地安全策略配置 A-3 流量完整性保护 A-4 事件监控…

算法程序设计 之 背包问题(5/8)

一、实验目的: 理解并掌握利用-动态规划算法与贪心算法求解不同背包问题。 实验内容 0-1背包问题给定n种物品和一个背包。物品i的重量是w[i],其价值为vi,背包的容量为C。问如何选择装入背包的物品,使得装入背包中物品的总价值最大…

CDH集群离线部署-6.3.1

1. 文件下载 CDH 安装使用到的相关文件:链接: https://pan.baidu.com/s/1xDQD1Sa8s47Qiu_EFYdhUA?pwd5mrt 提取码: 5mrt 2. 机器基础调整 所有机器都需要执行下面所有的步骤。 2.1. 准备机器 至少三台2核16G机器。 2.1.1. ECS 服务器 如果买的是 ECS 服务器&…

Apikit 自学日记:邀请成员一起协作

邀请成员一起协作 在 Apikit 中,所有的 API 接口都是以项目的方式进行管理,因此首先需要创建一个 API 管理项目。 除了创建 API 项目,还可以创建项目组来对项目进行分类或者设置统一的用户操作权限。 一、手动创建项目 进入 API 研发管理项…

有趣的笔试题——贪吃蛇游戏(确定不进来看看?)

原题 贪吃蛇游戏是一款耳熟能详的小游戏,通过上下左右控制蛇的方向,寻找吃的果子,每吃一口果子,蛇的身子会越吃越长,身子越长玩的难度就越大,不能碰墙,不能咬到自己的身体,更不能咬自…

关于springboot中前端传递多个数组以及其他参数及json在前后端转变方法技巧的记录

文末含一种json的动态解析方法,感兴趣的大佬记得看到最后评论交流 * 因公司GIS保密要求仅放部分代码在这儿 前端传输json的方法 json格式不再赘述 常规json传递 使用formData封装传递 好处就是当页面同时传递多个数组甚至是同时传递数组和参数到后台,可以自定义…

2023计算机组成原理复习【1-4】

第一章 计算机系统概述 1.计算机语言的分类:高级语言,低级语言(汇编语言与机器语言)。P8 高级语言是人类可读写的编程语言。低级语言包括汇编语言和机器语言两种。汇编语言是一种直接使用符号代替计算机指令的语言&a…

C++静态对象的移动问题

7.1返回普通的静态对象 MyString func(const char* p) {static MyString tmp(p);return tmp; } int main() {MyString s1("hello");s1func("helloworld");s1.Print();MyString s2;s2func("hello");s2.Print();return 0; } 结果: 进…

Elagamal和ECC

Elgamal加密方案 椭圆曲线加密体制 椭圆曲线应该是非奇异的,曲线的图不会自我相交或者没有顶点。 椭圆曲线的基本运运算 相异点相加PQ: 相同点相加PP: ## 椭圆曲线加解密 加解密原理: Alice选取一个椭圆曲线 E p ( a , b ) E_p(a,b) Ep​…

从0到1精通自动化测试,pytest自动化测试框架,生成html报告与html报告报错截图+失败重跑(五)

目录 一、生成html报告 1、pytest-html 2、html报告 3、指定报告路径 4、显示选项 5、更多功能 二、html报告报错截图失败重跑 1、conftest.py 2、报告展示 3、失败重试 一、生成html报告 1、pytest-html pytest-HTML是一个插件,pytest用于生成测试结果…