前言

早先做参数传递实验的时候忽略了日期类型,导致要用的时候踩坑不断。因为是学习笔记的关系,所以里面都只是截取关键的代码进行记录。

准备阶段

因为要用到@JsonFormat注解和工具类DateUtils,所以先在pom.xml中添加相关包的依赖:

<dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-annotations</artifactId><version>2.9.6</version>
</dependency><dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId><version>3.8.1</version>
</dependency>

我们平时建项目的时候,最好是建带Maven的项目。这样我们在用到本地没有的包的时候,只需要在pom.xml文件中添加一句依赖就可以了,否则就需要自己到网上去下载再手动导入。添加依赖可以理解为在项目中导入相关的包,可以为了我们节省大量的开发时间。

核心部分

1. Entity层

在实体类的日期属性上,我们需要加上@JsonFormat注解,利用它的pattern属性来进行时间的格式化,利用timezone属性来解决时差问题。“GMT+8”表示我们在东八区,不然我们收到前端传来的时间有可能相差8个小时。

@Column(name = "drop_date")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date dropDate;

2. dao层

不得不说,这个自动生成SQL语句是真的方便,不仅日期类型也能操作(好吧,数据库中存在的字段类型都可以),还不会因为数据库的不同而出现问题(支持跨平台)。
至于生成SQL语句的规则,再挂一波文档:官方文档

public interface MessageRepository extends JpaRepository<MessageAlarmRecord, Long> {// where dropDate <= startDatepublic List<Message> findByDropDateLessThanEqual(Date startDate); // where dropDate >= startDatepublic List<Message> findByDropDateGreaterThanEqual(Date statDate);// where startDate <= dropDate and dropDate <= endDatepublic List<Message> findByDropDateBetween(Date startDate, Date endDate);  //功能同上,可以用And关键字来进行其他查询条件的拼接public List<Message> findByDropDateGreaterThanEqualAndDropDateLessThanEqual(Date startDate, Date endDate);
}

3. controller层

以为到这里就没什么问题了,其实坑才刚开始……

  1. 不能用Date类型直接去接参数,必须先用String类对象去接到参数 ,然后再用DateUtils的pasteDate函数将其转换为Date类对象。
  2. 因为实体类中包含日期属性,所以在添加数据的时候也不能直接用实体类去获取前端传过来的参数
  3. 一般做项目的时候需要规定前端以什么方式给后端传参,比如说json、form表单,url等,因为不同的传参方式会对应不同的注解。

本次是以json方式传参,这里用@RequestBody + Map接收前端传过来的键值对。里面用到的DateUtils.parseDate()函数的第一个参数是表示时间的字符串,第二个参数是时间的格式(详情可以参照SimpleDateFormat类时间格式的写法)。

    @RequestMapping(path = "/find3")public List<Message> findBetween(@RequestBody Map<String, Object> params) {Date startDate = null;Date endDate = null;try {//第一个参数是表示时间的字符串,第二个参数是时间的格式startDate = DateUtils.parseDate((String)params.get("startDate"), "yyyy-MM-dd HH:mm:ss");endDate = DateUtils.parseDate((String)params.get("endDate"), "yyyy-MM-dd HH:mm:ss");} catch (ParseException e) {e.printStackTrace();}return marRepository.findByDropDateBetween(startDate, endDate);}

测试时传递的数据:

{"startDate":"2019-05-23 14:35:12","endDate":"2019-08-12 11:02:00"
}

参考资料

  1. https://www.sojson.com/blog/246.html (关于@JsonFormat)
  2. https://blog.csdn.net/yaomingyang/article/details/79142201 (关于DateUtils,凑合看)

spring boot参数为日期的查询相关推荐

  1. spring boot 集成 mongodb 通过id查询问题

    spring boot 集成 mongodb 通过id查询问题 java 连接 mongodb 查询时通过id 查询不到数据,但其他字段是可以的,现在请各位大佬看看会是什么原因 通过id为参数查询 具 ...

  2. Spring Boot参数校验以及分组校验的使用

    简介:做web开发基本上每个接口都要对参数进行校验,如果参数比较少,还比较容易处理,一但参数比较多了的话代码中就会出现大量的if-else语句.虽然这种方式简单直接,但会大大降低开发效率和代码可读性. ...

  3. Spring Boot和Hibernate:打印查询和变量

    办公室已经很晚了,您陷入了这个带有JoinColumns和层叠的奇怪的Jpa代码中,而您找不到错误所在. 您希望有一种方法可以查看打印的查询以及值. 稍微调整一下Spring Boot应用程序就可以实 ...

  4. 参数幂等性校验失败_快速入手 Spring Boot 参数校验

    1.背景介绍 2.Spring Boot文档中的Validation 3.Hibernate Validator 4.Spring Validator 5.示例 6.补充 <Netty 实现原理 ...

  5. @valid 校验_一文带你快速入手 Spring Boot 参数校验

    点击上方"Java专栏",选择"置顶或者星标" 第一时间阅读精彩文章! ☞ 程序员进阶必备资源免费送「21种技术方向!」 点击查看☜ 作者:狂乱的贵公子 来源: ...

  6. spring boot参数校验 告别校验胶水代码

    ​ springboot进行参数校验 文章目录 前言 普通的逻辑代码校验 PathVariable 路径变量校验 JSR规范是什么? springboot-JSR303参数校验 引入参数校验依赖 官网 ...

  7. Spring boot 参数校验

    2019独角兽企业重金招聘Python工程师标准>>> 转载  http://www.cnblogs.com/bianzy/p/6639799.html SpringBoot在内部通 ...

  8. Spring Boot参数校验

    1. 概述 作为接口服务提供方,非常有必要在项目中加入参数校验,比如字段非空,字段长度限制,邮箱格式验证等等,数据校验常用到概念: JSR303/JSR-349: JSR303是一项标准,只提供规范不 ...

  9. java 启动参数 别名,Spring boot 参数别名处理

    背景 处理老系统时,前端请求的参数使用的蟒蛇式(如:create_time),而后端接收使用的是驼峰式(如createTime).我们想自动进行参数转换. Spring 提供的能力 @RequestP ...

最新文章

  1. Python实现局域网(Socket)通信
  2. 计算机考研备考指南,计算机专业考研复习指南篇
  3. Docker Kafka 单机版安装
  4. 24.QTreeWidget的用法
  5. 幻灯片形式设计:从方法到技巧
  6. ubuntu安装配置ssmtp
  7. windows2003——工作组和域控制器
  8. asp.net中配置使用Sqlite轻型数据库
  9. XMind 超强入门完全指南
  10. matlab-FCM模糊聚类
  11. 如何实现电子签章效果
  12. 基于php+mysql的大学生四六级英语考试报名成绩管理
  13. EMQ压力测试及系统优化(单机11万并发连接)
  14. (附源码)Springboot人体健康检测微信小程序 毕业设计012142
  15. 手机 SMS PDU 格式参考手册
  16. elasticsearch 修改已存在的filed值 和 新增filed
  17. 【有利可图网】PS实战系列:PS设计制作一个超赞的漂亮艺术花纹人像海报
  18. Magic Leap开发指南(7)-- 眼球追踪(Unity)
  19. 汇编语言与微机原理 期末半开卷复习整理(下)
  20. Qiime2+Origin绘制稀释曲线

热门文章

  1. 密码学基础知识(十)查缺补漏(缺)
  2. 图片轮播器,relativelayout,外加textview小结
  3. 160个Crackme030之一元一次方程
  4. Python程序练习题6.2
  5. 1110 Complete Binary Tree (25 分)【难度: 一般 / 知识点: 判断完全二叉树】
  6. HTTPSession对象知识总结
  7. Spring boot模板引擎缓存
  8. ServletConfig接口
  9. ospf hello时间和dead_使用OSPF协议使SPOKE端正常通信
  10. ostream作为函数返回值_Go语言入门必知教程-函数