@DateTimeFormat与@JsonFormat不完全解析

目录

    • 前言
    • 测试代码
    • @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.mfbz.cn/a/32343.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

UE4自定义资产类型编辑器实现

在虚幻引擎中,资产是具有持久属性的对象,可以在编辑器中进行操作。 Unreal 附带多种资源类型,从 UStaticMesh 到 UMetasoundSources 等等。 自定义资源类型是实现专门对象的好方法,这些对象需要专门构建的编辑器来进行高效操作。 …

SQL语言的四大组成部分——DCL(数据控制语言)

1️⃣前言 SQL语言中的DCL(Data Control Language)是一组用于控制数据库用户访问权限的语言,主要包括GRANT、REVOKE、DENY等关键字。 文章目录 1️⃣前言2️⃣DCL语言3️⃣GRANT关键字4️⃣REVOKE关键字5️⃣DENY关键字6️⃣总结附&#xff1…

【kubernetes】部署网络组件Calico与CoreDNS

前言:二进制部署kubernetes集群在企业应用中扮演着非常重要的角色。无论是集群升级,还是证书设置有效期都非常方便,也是从事云原生相关工作从入门到精通不得不迈过的坎。通过本系列文章,你将从虚拟机配置开始,到使用二进制方式从零到一搭建起安全稳定的高可用kubernetes集…

基于YOLO V8的车牌识别

赵春江 2023年6月 1、前言 十年前就想实现车牌识别这项任务,虽然当时这项技术就已较成熟(与现在的实现方法不同),但那时的我还具备这个能力。弹指一瞬间,没想到十年间人工智能技术已经发展到一个新的高度&#xff0c…

Nacos架构与原理 - 健康检查机制

文章目录 注册中心的健康检查机制Nacos 健康检查机制临时实例健康检查机制永久实例健康检查机制集群模式下的健康检查机制 注册中心的健康检查机制 想象发生地质灾害,被掩埋在废墟下,搜救队需定位才能施救。两种方法: 大喊求救,告知位置与健康状况,让搜救队知晓搜救队使用专业…

社区活动 | OpenVINO™ DevCon 中国系列工作坊第二期 | 使用 OpenVINO™ 加速生成式 AI...

生成式 AI 领域一直在快速发展,许多潜在应用随之而来,这些应用可以从根本上改变人机交互与协作的未来。这一最新进展的一个例子是 GPT 模型的发布,它具有解决复杂问题的能力,比如通过医学和法律考试这种类似于人类的能力。然而&am…

CnOpenData数字经济专利申请与授权数据

一、数据简介 自人类社会进入信息时代以来,数字技术的快速发展和广泛应用衍生出数字经济。与农耕时代的农业经济、工业时代的工业经济大有不同,数字经济是一种新的经济、新的动能、新的业态,并引发了社会和经济的整体性深刻变革。现阶段&…

openEuler操作系统禁用 Nouveau

目录 一、什么是openEuler 二、什么是Nouveau 三、禁用Nouveau Liunx系统安装NVIDIA显卡驱动时需要禁用Nouveau,openEuler操作系统也不例外,但是网上openEuler操作系统如何禁用Nouveau的资料比较少,而且基本都不靠谱,我找到一个…

Keras-深度学习-神经网络-人脸识别模型

目录 模型搭建 模型训练 模型搭建 ①导入所需的库,导入了 Keras 和其他必要的库,用于构建和处理图像数据。 from keras.models import Sequential from keras.layers import Dense, Flatten, Conv2D, MaxPooling2D import os from PIL import Image …

streamlit——搭建学生评分网站(告别问卷星)

streamlit搭建多人评分网站 文章目录 streamlit搭建多人评分网站一、引言二、数据准备三、streamlit代码四、数据合并代码 一、引言 当需要对班级内多人进行打分时,为了不使用问卷星等平台进行评分,使用pandas进行操作数据,使用streamlit进行…

chatgpt赋能python:Python要点:从入门到精通

Python要点:从入门到精通 Python是一门高级编程语言,是一种解释型、面向对象、动态数据类型的语言。它的设计思想是“代码易读易写”,在数据科学、人工智能、自动化测试、Web开发等领域广泛应用。本文将从入门到精通的角度来介绍Python的要点…

内网穿透技术

文章目录 前言1. 安装JAVA2. MCSManager安装3.局域网访问MCSM4.创建我的世界服务器5.局域网联机测试6.安装cpolar内网穿透7. 配置公网访问地址8.远程联机测试9. 配置固定远程联机端口地址9.1 保留一个固定tcp地址9.2 配置固定公网TCP地址9.3 使用固定公网地址远程联机 转载自内…

自学黑客(网络安全),一般人我劝你还是算了吧(自学网络安全学习路线--第九章 Internet安全协议)【建议收藏】

文章目录 一、自学网络安全学习的误区和陷阱二、学习网络安全的一些前期准备三、自学网络安全学习路线一、安全协议概述二、IPSec协议1、概述2、IP封装过程3、IPSec不安全性4、IPSec的功能5、IPSec体系结构6、IPSec的AH7、IPSec的AH8、IPSec的ESP9、IPSec的ESP10、ISAKMP11、IK…

中职网络搭建(服务器)—Linux LVM(标准答案)

题目要求如下 使用fdisk-l查看磁盘信息 我们添加的磁盘分别是sdb和sdc Fdisk /dev/sdb 依次输入n,p,1,回车,2G (新建2G的主分区) 依次输入n,e,2,回车,回车(使用剩余的全部空间建立扩展分区) 依…

高德地图的使用

JS API 结合 Vue 使用 高德地图 jsapi 下载、引入 npm add amap/amap-jsapi-loaderimport AMapLoader from amap/amap-jsapi-loader 使用2.0版本的loader需要在window对象下先配置 securityJsCode JS API 安全密钥使用 JS API 使用 script 标签同步加载增加代理服务器设置…

数据挖掘(6.1)--神经网络

目录 神经网络简介 BP算法 Delta学习规则的基本原理 BP神经网络的结构 BP神经网络的算法描述 神经网络训练一般步骤 后向传播算法的主要步骤 优缺点 BP算法简单举例 神经网络简介 神经网络是一种计算模型,它受到人脑处理信息的生物神经网络过程的启发。人…

第44步 深度学习图像识别:ResNet50建模(Tensorflow)

基于WIN10的64位系统演示 一、写在前面 (1)ResNet50 ResNet50是一种深度学习模型,由微软研究院的研究人员在2015年提出。"ResNet"的全称是"Residual Network",意为"残差网络","…

React 基本介绍

目录 1、React是什么 2、React 三大颠覆性的特点 2.1 组件 2.2 JSX 2.3 Virtual DOM 3、Flux 架构(redux) 3.1 Flux 3.2 redux 4、打包工具(webpack) 4.1 webpack与RequireJS、browserify 4.2 模块规范 4.3 非 JavaSc…

实验篇(7.2) 17. 站对站安全隧道 - FortiGate作为SSL客户端(SSL) ❀ 远程访问

【简介】虽然常用的站到站的连接用的是IPsec VPN,但是在某些特殊情况下,UDP500或4500端口被阻断,IPsec VPN无法连接,那么还有其它办法实现站到站的连接吗?SSL VPN也可以的。 实验要求与环境 OldMei集团深圳总部部署了域…

【云原生】二进制k8s集群(下)部署高可用master节点

本次部署说明 在上一篇文章中,就已经完成了二进制k8s集群部署的搭建,但是单机master并不适用于企业的实际运用(因为单机master中,仅仅只有一台master作为节点服务器的调度指挥,一旦宕机。就意味着整个集群的瘫痪&#…
最新文章