最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringMVC如何正確接收時間的請求示例分析

 更新時間:2023年09月11日 14:39:28   作者:土豆肉絲蓋澆飯  
這篇文章主要為大家介紹了SpringMVC如何正確接收時間的請求示例分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

前言

一般我們對前端提供的http接口為以下三種方式

  • GET請求
  • POST請求,表單提交
  • POST請求,JSON提交

從SpringMVC的處理來看

第一種方式通過@RequestParam或者@PathVariable來接收
第二種方式通過@RequestParam來接收
第三種方式通過@RequestBody來接收

為什么第一二種方式都可以使用@RequestParam來接收參數(shù)??

因為這兩種方式,在sevlet規(guī)范中,都是通過getParameter方法獲取對應(yīng)的參數(shù)

重點! For HTTP servlets, parameters are contained in the query string or posted form data.

對于springmvc,更精確的來講

@RequestParam對應(yīng)RequestParamMethodArgumentResolver處理器
@PathVariable對應(yīng)PathVariableMethodArgumentResolver處理器
@RequestBody對應(yīng)RequestResponseBodyMethodProcessor處理器

這些處理器主要邏輯為,提取參數(shù),轉(zhuǎn)換參數(shù)。

針對@RequestParam和@PathVariable提取到的參數(shù)都是String字符串,因此使用到了Spring的轉(zhuǎn)換服務(wù)
ConversionService進行轉(zhuǎn)換,最終調(diào)用到DateFormatter這個類。

對于RequestBody,提取到的參數(shù)也是String字符串,不過這個字符串是Json類型的,因此使用到了HttpMessageConverter。

在SpringBoot中針對Json的轉(zhuǎn)換,默認(rèn)使用了MappingJackson2HttpMessageConverter。

使用

通過@RequestParam接收

GET請求

@GetMapping("/dateFromRequestParam")
public String dateFromRequestParam(@RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") Date date){
  return SIMPLE_DATE_FORMAT.format(date);
}

測試代碼

curl http://localhost:8080/dateFromRequestParam\?date\=2020-10-10%2010:10:10

POST請求+表單提交

@PostMapping("/dateFromRequestParam")
public String dateFromRequestParam2(@RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") Date date){
  return SIMPLE_DATE_FORMAT.format(date);
}

測試代碼

curl -X POST  http://localhost:8080/dateFromRequestParam -d 'date=2020-10-12 10:10:10'

通過@RequestParam方式接受參數(shù)的時候,這個注解也是可以省略的,如果你要控制一個參數(shù)必傳的話,請加上這個注解

通過@PathVariable接受

@GetMapping("/dateFromPathVariable/{date}")
public String dateFromPathVariable(@PathVariable("date") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") Date date){
    return SIMPLE_DATE_FORMAT.format(date);
}

測試代碼

curl http://localhost:8080/dateFromPathVariable/2020-10-10%2010:10:10

通過@RequestBody接收

POST請求+JSON提交

@PostMapping("/dateFromJson")
public String dateFromJson(@RequestBody Input param){
  return SIMPLE_DATE_FORMAT.format(param.getDate());
}
@Data
public static class Input{
  @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
  private Date date;
}

代碼

 curl -X POST -H 'Content-Type: application/json' http://localhost:8080/dateFromJson -d '{"date":"2020-10-12 10:10:10"}'

時區(qū)問題

使用Date類型接受時間字符串十分簡單,最麻煩的問題的時差問題。

明明前端給了你10點鐘,為什么變成了18點鐘。

因為上述兩種方式對于時區(qū)的處理是不一樣的,針對@RequestBod,他底層使用了Jackson,因為Jackson默認(rèn)的時區(qū)配置為UTC,也就是0時區(qū)。

因此你通過0時區(qū)接受了時間2020-10-10 10:00:00 , 而在保存數(shù)據(jù)庫,或者你輸出的時候,使用的都是我們當(dāng)前機器所在的時區(qū),也就是東8區(qū),因此會加8個小時。

因此針對jackson框架,我們需要指定為東八區(qū),

@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")

而對于@RequestParam這種由spring內(nèi)置轉(zhuǎn)換器處理的時間,底層使用的是SimpleDateFormat,默認(rèn)使用的操作系統(tǒng)的時區(qū),所以我們無需對時區(qū)進行配置。

@DateTimeFormat的錯誤使用

在我們的業(yè)務(wù)代碼中,我發(fā)現(xiàn)了一些以下的錯誤代碼

比如

@Data
public static class Input{

    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private Date date;

}

用它來接收前端傳過來的{"date":"2020:10:10"}

拜托,@DateTimeFormat是spring的注解,針對Jackson根本不會失效。

只因為Jackson默認(rèn)的反序列化支持2種格式的時間字符串,yyyy-MM-ddyyyy-MM-dd'T'HH:mm:ss.SSSZ

并且時區(qū)上也是存在問題的。

只不過因為剛好你的業(yè)務(wù)代碼是忽略后面的Time,你才逃過一劫。

參考  http://m.fzitv.net/program/285772dl4.htm

以上就是SpringMVC如何正確接收時間示例分析的詳細內(nèi)容,更多關(guān)于SpringMVC接收時間的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Spring?boot詳解fastjson過濾字段為null值如何解決

    Spring?boot詳解fastjson過濾字段為null值如何解決

    這篇文章主要介紹了解決Spring?boot中fastjson過濾字段為null值的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • 解決java編譯錯誤( 程序包javax.servlet不存在javax.servlet.*)

    解決java編譯錯誤( 程序包javax.servlet不存在javax.servlet.*)

    這篇文章主要介紹了解決java編譯錯誤的相關(guān)資料,主要解決 程序包javax.servlet不存在javax.servlet.*的問題,需要的朋友可以參考下
    2017-08-08
  • idea+spring?boot創(chuàng)建項目的搭建全過程

    idea+spring?boot創(chuàng)建項目的搭建全過程

    Spring?Boot是Spring社區(qū)發(fā)布的一個開源項目,旨在幫助開發(fā)者快速并且更簡單的構(gòu)建項目,這篇文章主要介紹了idea+spring?boot創(chuàng)建項目的搭建全過程,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2025-09-09
  • 詳解Java設(shè)計模式編程中命令模式的項目結(jié)構(gòu)實現(xiàn)

    詳解Java設(shè)計模式編程中命令模式的項目結(jié)構(gòu)實現(xiàn)

    這篇文章主要介紹了Java設(shè)計模式編程中命令模式的項目結(jié)構(gòu)實現(xiàn),命令模式將請求與執(zhí)行分離,可以多個命令接口的實現(xiàn)類,隱藏真實的被調(diào)用方,需要的朋友可以參考下
    2016-04-04
  • Java中csv文件讀寫超詳細分析

    Java中csv文件讀寫超詳細分析

    CSV是一種通用的、相對簡單的文件格式,其文件以純文本形式存儲表格數(shù)據(jù),下面這篇文章主要給大家介紹了關(guān)于Java中csv文件讀寫分析的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-05-05
  • Intellij IDEA神器居然還有這些小技巧

    Intellij IDEA神器居然還有這些小技巧

    Intellij IDEA真是越用越覺得它強大,它總是在我們寫代碼的時候,不時給我們來個小驚喜,本文給大家主要介紹一些你可能不知道的但是又實用的小技巧,感興趣的朋友跟隨小編一起看看吧
    2021-01-01
  • SpringBoot使用ExceptionHandler做異常處理

    SpringBoot使用ExceptionHandler做異常處理

    這篇文章主要介紹了SpringBoot使用ExceptionHandler做異常處理,這篇文章通過多種方法案例來介紹該項技術(shù)的使用,需要的朋友可以參考下
    2021-06-06
  • 哈希表在算法題目中的實際應(yīng)用詳解(Java)

    哈希表在算法題目中的實際應(yīng)用詳解(Java)

    散列表(Hash?table,也叫哈希表)是根據(jù)關(guān)鍵碼值(Key?value)而直接進行訪問的數(shù)據(jù)結(jié)構(gòu),下面這篇文章主要給大家介紹了關(guān)于哈希表在算法題目中的實際應(yīng)用,文中介紹的方法是Java,需要的朋友可以參考下
    2024-03-03
  • RestTemplate接口調(diào)用神器常見用法匯總

    RestTemplate接口調(diào)用神器常見用法匯總

    這篇文章主要介紹了RestTemplate接口調(diào)用神器常見用法匯總,通過案例代碼詳細介紹RestTemplate接口調(diào)用神器常見用法,需要的朋友可以參考下
    2022-07-07
  • SLF4J報錯解決:No SLF4J providers were found的問題

    SLF4J報錯解決:No SLF4J providers were found的

    這篇文章主要介紹了SLF4J報錯解決:No SLF4J providers were found的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-06-06

最新評論

太康县| 宜阳县| 岳池县| 临沭县| 宜川县| 固阳县| 和硕县| 通州区| 西藏| 图们市| 科技| 介休市| 双柏县| 那坡县| 通许县| 慈溪市| 阿图什市| 永年县| 东方市| 仙居县| 民和| 正镶白旗| 麦盖提县| 临江市| 什邡市| 普兰县| 崇文区| 郓城县| 英德市| 韩城市| 孟村| 韶山市| 博兴县| 西宁市| 延庆县| 江永县| 噶尔县| 漳州市| 高唐县| 盐池县| 历史|