@DateTimeFormat失效原因

EasyExcel 导出 excel 后无法实现日期筛选与数值类型合计问题与解决 文章目录问题现象1、对于日期类型excel对日期类型筛选后正常现象easyexcel导出后对日期类型筛选后异常现象2、对于金额类型程序解决方案实现类 OrderCellHandler.java 问题现象 1、对于日期类型 excel做筛选后应该支持按年、月、日筛选,而easyexcel 按注解 @DateTimeFormat(“yyyy-MM-dd”) 实现后虽然呈现格式上没问题,但是单元格格式还是存在问题导致筛选后不正常,具体如图效果: excel对日期类型筛选后正常现象 easyexcel导出后对日期 阅读详情

注解作用

        将前端传递 字符串参数 转换为指定格式的java.util.Date参数, 并绑定到方法参数上

使用方式

@RestController
@RequestMapping("/aa") //post请求也是ok的
public class TimetableLogController extends BaseApiController {
    @GetMapping("/test")
    public Object test(@RequestParam(value = "startTime") 
                       @DateTimeFormat(pattern="yyyy-MM-dd") Date startTime) {
        System.out.println(startTime);
        return null;
    }

}

        最常用使用方式: get请求, 参数使用@RequestParam注解描述

失效原因(不是转换报错哦)

网上的错误说法

        1. 必须是get请求  --> 错, post也是ok的

        2. 必须在url上传递参数 --> 错, 表单参数form-data也是可以的

 错误原因: 使用@RequestParam注解或省略注解, 默认使用的参数解析器都是RequestParamMethodArgumentResolver, 它解析参数与请求方式无关, 也可解析表单内参数

可能的错误原因(欢迎大家留言补充, 博主会及时更新)

        1. 参数写在row-json中

                (不生效原因: 参数解析器为RequestResponseBodyMethodProcessor, 只会去处理@RequestBody的参数, 不处理@RequestParam注解或无注解的参数)

        2. 使用了@InitBinder配置了个性化参数类型转换器PropertyEditorSupport

                (不生效原因: @InitBinder影响了@DateTimeFormat使用. 参数解析时, 个性化参数解析优先级高于@DateTimeFormat的参数转换, 下图为源码举证)

// 代码所在类 org.springframework.beans.TypeConverterDelegate

    @Nullable
    public <T> T convertIfNecessary(@Nullable String propertyName, @Nullable Object oldValue, @Nullable Object newValue, @Nullable Class<T> requiredType, @Nullable TypeDescriptor typeDescriptor) throws IllegalArgumentException {

        // 获取个性化参数转换器
        PropertyEditor editor = this.propertyEditorRegistry.findCustomEditor(requiredType, propertyName);
        ConversionFailedException conversionAttemptEx = null;
        ConversionService conversionService = this.propertyEditorRegistry.getConversionService();


        // 没有个性化参数转换器情况下 才走@DateTimeFormat解析流程
        if (editor == null && conversionService != null && newValue != null && typeDescriptor != null) {
            TypeDescriptor sourceTypeDesc = TypeDescriptor.forObject(newValue);
            if (conversionService.canConvert(sourceTypeDesc, typeDescriptor)) {
                try {
                    return conversionService.convert(newValue, sourceTypeDesc, typeDescriptor);
                } catch (ConversionFailedException var14) {
                    conversionAttemptEx = var14;
                }
            }
        }

        Object convertedValue = newValue;
        if (editor != null || requiredType != null && !ClassUtils.isAssignableValue(requiredType, newValue)) {
            if (typeDescriptor != null && requiredType != null && Collection.class.isAssignableFrom(requiredType) && newValue instanceof String) {
                TypeDescriptor elementTypeDesc = typeDescriptor.getElementTypeDescriptor();
                if (elementTypeDesc != null) {
                    Class<?> elementType = elementTypeDesc.getType();
                    if (Class.class == elementType || Enum.class.isAssignableFrom(elementType)) {
                        convertedValue = StringUtils.commaDelimitedListToStringArray((String)newValue);
                    }
                }
            }

            if (editor == null) {
                editor = this.findDefaultEditor(requiredType);
            }

            
            // 有个性化参数转换器, 直接转换执行
            convertedValue = this.doConvertValue(oldValue, convertedValue, requiredType, editor);
        }

        boolean standardConversion = false;
        .....
}

拓展

使用@JsonFormat注解来解析row-json的参数

        示例: 

@Data
public class test {
    @JsonFormat(pattern="yyyy-MM-dd",timezone = "GMT+8")
    private Date gatherTime;
}

        也可使用该注解将数据库date/datetime类型参数转换为指定格式的字符串时间

        需要添加的依赖

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.72</version>
</dependency>

废话少说:

        @DateTime注解失效原因:

                1.参数在json上

                2.使用了@InitBinder注解

从@DateTimeFormat到@JsonFormat:Spring Boot日期处理的场景抉择与实战避坑 本文深入解析Spring Boot中@DateTimeFormat和@JsonFormat注解在日期处理中的应用场景与实战技巧。通过对比两者的核心用法、常见陷阱及解决方案,帮助开发者避免时区问题、格式不匹配等常见错误,提升前后端交互的日期处理效率与准确性。特别针对@DateTimeFormat失效原因提供了详细的填坑记录和测试建议。 阅读详情

相关推荐

【jackson】jackson全局配置方式 因为JsonDeserializer全局配置优先级导致@JsonFormat失效的问题

我们知道jackson的序列化 反序列化 配置方式较多,本文介绍常见的几种。当然,本文重点难点是在于文章目录中 最后一种配置 通过JsonDeserializer方式 导致@JsonFormat失效的问题。避开问题的方式有很多 一条路行不通就换一条路,但总会有想解决问题的人 偏要一条路走到黑 ,一个程序员最无助 无非遇到bug 百度谷歌Stack Overflow都搜不到答案的时候, 希望本文可以帮助到有需要的同学。

孟秋与你的博客 6345

@DateTimeFormat无效原因

1、@DateTimeFormat无效原因 一般都是使用@DateTimeFormat把传给后台的时间字符串转成Date,使用@JsonFormat把后台传出的Date转成时间字符串,但是@DateTimeFormat只会在类似@RequestParam的请求参数(url拼接的参数才生效,如果是放到RequestBody中的form-data也是无效的)上生效,如果@DateTimeFormat...

jupiter_888的博客 1万+

通义千问语言模型Qwen2.5架构详解

此外,将基于API的模型 Qwen-Plus 与领先的专有和开源模型进行了对比,包括 GPT4-o、Claude-3.5-Sonnet、Llama-3.1-405B和DeepSeek-V2.5。Qwen2.5-Math-72B-Instruct的整体性能超越了Qwen2-Math-72B-Instruct和GPT4-o,甚至是非常小的专业模型如 Qwen2.5-Math-1.5B-Instruct也能在与大型语言模型的竞争中取得高度竞争力的表现。近来也出现了明显的转向小型语言模型(SLMs)的趋势。

搏博的专栏 1万+

日期格式化时注解@DateTimeFormat无效的问题分析

作者:汤圆 个人博客:javalover.cc 背景 有时候我们在写接口时,需要把前台传来的日期String类型转为Date类型 这时我们可能会用到@DateTimeFormat注解 在请求数据为非JSON格式时,这个注解是没有问题的,可用的; 但是当请求数据为JSON格式时,问题就出现了 此时如果请求参数没有加@RequestBody注解,那么请求参数不会执行类型转换操作,数据都是默认为空(基本类型比如int = 0, 对象引用比如Date date= null) 此时如果请求参数有加@RequestB

汤圆学Java 6479

智能客服系统知识库数据清洗

数据清洗(Data Cleaning)是确保智能客服知识库高效运行的重要环节,主要涉及。| 分类 & 标签优化 | 重新组织 FAQ,创建关键字索引 || 定期更新 | 结合用户反馈,每 1-3 个月优化 |才能提供更优质、正确的回答,提升客户满意度!、Zendesk、Intercom 等)中,: FAQ 或客服回答中可能存在。,会影响 AI 匹配的准确性。是一个持续优化的过程,

z1941563559的博客 2098

zemax混合式非序列模拟

注意不要点击左侧的非序列模式,那个时纯粹的非序列,会清除序列模式的数据。第2、4、6透镜材质为空气,是为了让光线进入到多重透镜内部。这时普通的优化方式会失败。平行光束经过多焦透镜时,会汇聚在不同焦距处。所以还需要控制能量的大小,进行优化。接下来用非序列模式设计一个多焦透镜。像面的孔径为圆形通光孔:0-1.2。透镜不同位置处有不同的聚焦位置。透镜的z轴位置相同,重合。

fendoudecheng的博客 3064

@DateTimeFormat @DateTimeFormat失效原因及测试填坑记录

@DateTimeFormat @DateTimeFormat失效原因及测试 一、时间传值 前端时间控件,一般情况下直接会传一个yyyy-MM-dd的日期字符串到后台。这个时候如果我们直接用java.util.Date类型就无法正确接收到。或者我们从数据库里查到DateTime类型并且用java的Date类型接收并返回给前台的时候,前台也无法用yyyy-MM-dd的形式进行呈现。 这个时候,前面两种情况分别对应了@DateTimeFormat和@JsonFormat注解的使用。 二、@DateTimeFo

liuerchong的博客 1万+

从 SM30 到 Fiori:在 SAP BTP ABAP Environment 里创建 Business Configuration 配置维护对象的完整路径

摘要 在SAP BTP的ABAP环境中,传统SAP GUI和SM30配置方式被Business Configuration (BC)替代。BC通过Fiori应用维护配置,支持传输和权限控制。配置表需满足可维护性条件,如允许数据维护、包含技术字段等。通过ADT生成Maintenance Object和Transport Object,实现配置发布与治理。权限管理需创建IAM App和Business Catalog,确保配置可维护。BC在云端延续了可控、可追溯、可发布的治理原则。 (字数:150)

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 237

@DateTimeFormat 失效

@DateTimeFormat注解:适用于请求数据为非JSON数据,不会格式化返回数据 @JsonFormat注解:适用于请求数据为JSON数据(尤其有日期数据时),且需在请求方法的参数前加@RequestBody`注解,会格式化返回数据 @RequestBody注解:解析传来的JSON数据,转换成对应的Java对象 @ResponseBody注解:转换Java对象为JSON数据,用来作为返回数据输出到前端 日期格式化相关:请求非JSON数据,建议用@DateTimeFormat即可,此时不会格式化返回数据

czqbaifnxkj的博客 755

[QMT量化交易小白入门]-九、如何用Python记录每一笔交易和调试,报错信息?

定义一个函数来获取日志记录器。: 返回全局的日志记录器,以便在其他地方调用。

木头大左的博客 2143

智能车图像处理19-进阶篇11--斜入十字补线

这篇文章主要讲述智能车竞赛中如何对于斜入十字进行补线操作。

taiyuezyh的博客 7477

springboot中使用@DateTimeFormat()失效原因

1.实体中导入的包应该是import java.sql.Date;(sql包)。错误导入了util的包导致失效。 2.pom.xml中未加入依赖。 <dependency> <groupId>joda-time</groupId> <artifactId>joda-time</artifactId> <version>2.3</version>

Hambur_的博客 3319

042、双管反激的电压应力优势

【摘要】本文通过300W工业电源炸管案例,对比分析了单管与双管反激拓扑的电压应力差异。单管反激因漏感能量难以处理,尖峰电压可达1180V,需依赖RCD吸收电路但效率低下;双管反激通过钳位二极管将漏极电压限制在输入电压水平(实测650V),能量回馈使效率提升2-3%。虽增加两个MOS管,但可选用600V器件(单管需1200V),总成本反降15%以上。作者建议150W以上或高压输入场景优先采用双管反激,其确定的电压应力可显著提升可靠性,避免单管反激的参数玄学问题。关键设计要点包括快恢复二极管选型、紧凑布局及漏感

Jack010169的博客 78

记一次@jsonFormat和@DateTimeFormat时间转换都失效的问题

使用@jsonFormat和@DateTimeFormat时间转换都失效,返回json的时间类型依然是时间戳的解决方法。

drclef的博客 1787

企业AI选型大揭秘:扣子(Coze) Bot与微信对话开放平台深度剖析

本文对比分析了字节跳动的扣子(Coze)Bot和腾讯的微信对话开放平台两款AI聊天机器人解决方案。扣子(Coze)Bot凭借强大的大模型支持、丰富的插件生态、低代码开发及多平台部署能力,在功能丰富度和灵活性方面表现突出,适合技术实力强、业务场景复杂的企业。微信对话开放平台则依托微信生态优势,在客户服务和营销推广场景中更具优势,其零门槛接入方式更适合技术能力较弱的企业。企业在选型时应综合考虑规模、预算、业务场景和技术能力等因素,选择最适合的AI解决方案,以充分发挥AI技术价值,提升企业竞争力。

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 433

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

@DateTimeFormat注解无效

在SpringBoot项目中,有时我们想在属性或方法上使用@DateTimeFormat注解,试图传入或获取指定的日期格式,发现一直失败,即@DateTimeFormat注解失效了。 比如我指定的格式为(yyyy-MM-dd HH:mm:ss)——@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") 在使用@DateFormat注解并不能转换为我想要的指定日期格式后,我尝试这样做 使用@JsonFormat注解替换,再搭配局部注解@RequestBody使用,最

m0_46909817的博客 5707

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

@DateTimeFormat 与 @JsonFormat 的区别

@DateTimeFormat 与 @JsonFormat 的区别 @JsonFormat 是 jackson 对 json 数据进行格式化, 包含序列化和反序列化. 只与 json 有关. @DateTimeFormat 是 spring 对日期格式的赋值进行格式化, 只包含反序列化. 作用是限制入参格式. 为什么 @DateTimeFormat 要限制呢? 因为日期的表现形式有很多种, 如果不规定格式, 后端就不知道以何种格式接收, 就好比年月日和日月年. 设置 @DateTimeForm

howeres的博客 1751

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Spring MVC @DateTimeFormat失效

Spring MVC有自己处理表单的库,在使用时,需要在相应的JSP文件头部加上 &amp;lt;%@ taglib prefix=“mvc” uri=“http://www.springframework.org/tags/form” %&amp;gt;,如果通过maven的create from archetype时,还需要加上&amp;lt;%@ page isELIgnored=&quot;false&quot;来避免使用&amp;lt;m...

u7Ckm的博客 2867

时间转换@DateTimeFormat注解和@JsonFormat注解

@DateTimeFormat注解和@JsonFormat注解 之前一直使用的@DateTimeFormat注解和前端的时间格式转换的,今天偶然发现该注解失效了,所以查了一下,并测试发现了不同,记录下来: 先上总结: 1.使用param传递接收时间参数时,不管什么格式,后台必须使用@DateTimeFormat注解才可以接收; 2.使用body传递接收时间参数时, 后台默认接收“yyyy-MM-dd HH:mm:ss”格式的参数,并转换为date对象, 其他格式时需要使用@JsonFormat注解才可以接收

weixin_44903702的博客 2970

解决@JsonFomat()@DateTimeFormat不生效的问题

前言 最近在项目中,发现出参很神奇现象,若是字段值为null会不显示该字段,并且时间格式已经定义为yyyy-MM-dd HH:mm:ss ,但是还是不行,如下:时间是毫秒的,并且null字段也没有显示。 原因 翻阅资料,很多人是这是因为项目中添加了拦截器,并且对Json重新配置,后来发现项目中之前集成单点登录确实添加了拦截器,信息如下: 主要就是fastJsonHttpMessageConverters方法,这个方法里面配置了json返回的数据一些配置信息。从代码中看serializer.

weixin_44593504的博客 3330

Spring Boot 2.x 时间格式化:@JsonFormat 与 @DateTimeFormat 的 3 种典型误用场景解析

本文深入解析Spring Boot中@JsonFormat与@DateTimeFormat注解的3种典型误用场景,包括时区陷阱、请求类型混淆和作用域误解。通过真实案例和解决方案,帮助开发者避免时间格式化常见错误,提升后端开发效率。特别强调时区配置和注解的正确使用方式,确保时间数据处理的准确性。

weixin_34221276的博客 398

告别日期转换烦恼:@DateTimeFormat效率秘籍

实际测试下来,整个对比实验从环境搭建到性能测试,在平台上半小时就搞定了,比本地开发节省了大量环境配置时间。特别是部署预览功能,可以直接生成可测试的API端点,省去了Postman配置的麻烦。更麻烦的是,当需要支持多种日期格式时,代码复杂度会成倍增加。上实验这些功能时,发现它内置的Spring环境开箱即用,不用配置就能直接验证这类注解的效果,特别适合快速验证技术方案。在日常开发中,日期时间处理是个绕不开的坎儿。注解能大幅简化日期处理流程,今天就来做个深度对比,看看它究竟能帮我们省下多少功夫。

JetRaven12的博客 676

Spring Boot 3.2 时间格式化:@JsonFormat 与 @DateTimeFormat 的 5 种实战场景与避坑指南

本文深入解析Spring Boot 3.2中@JsonFormat与@DateTimeFormat注解的5种实战应用场景,包括REST API交互、Feign客户端调用、全局配置优先级、时区处理及复杂类型转换。通过对比核心差异、提供避坑指南和性能优化技巧,帮助开发者高效解决时间格式化问题,确保前后端数据交互的准确性和一致性。

414

@JsonFormat 和 @DateTimeFormat 注解使用

将后台 Date 类型日期,格式化成 String 类型日期。

m0_37109675的博客 232

工作记录之@DateTimeFormat和@JsonFormat的应用

上次跟领导吃饭,领导建议我记录一下自己的工作点滴,这样遇到过的坑才不会忘,今天就遇到了个问题,入参的时候Date属性上我使用@DateTimeFormat(“yyyy-MM-dd HH:mm:ss”),然后在测试的时候带有时分秒的时候没问题可以正常使用,但是当我写第二个接口给入参同样加这个注解发现没用,而且两个接口同样是POST请求,我很纳闷,后来用了JsonFormat(“yyyy-MM-dd ...

qq_39482465的博客 356
上一篇: SpringMVC源码浅析(SpringMVC执行流程)
下一篇: log4j配置详解
陈*^_^*
博客等级 码龄6年 48粉丝 16原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值