spring boot参数为日期的查询
前言
早先做參數傳遞實驗的時候忽略了日期類型,導致要用的時候踩坑不斷。因為是學習筆記的關系,所以里面都只是截取關鍵的代碼進行記錄。
準備階段
因為要用到@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語句的規則,再掛一波文檔:官方文檔
3. controller層
以為到這里就沒什么問題了,其實坑才剛開始……
本次是以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" }參考資料
總結
以上是生活随笔為你收集整理的spring boot参数为日期的查询的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Spring Boot实现简单的用户权限
- 下一篇: SpringData JPA条件查询、排