亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

SpringBoot開發(fā)詳解之Controller接收參數(shù)及參數(shù)校驗

 更新時間:2022年03月14日 10:40:22   作者:尼斯湖水鬼  
數(shù)據(jù)校驗是為了使系統(tǒng)更完整,數(shù)據(jù)更精確,同時也有利于維護數(shù)據(jù)的安全性,下面這篇文章主要給大家介紹了關于SpringBoot開發(fā)詳解之Controller接收參數(shù)及參數(shù)校驗的相關資料,需要的朋友可以參考下

Controller 中注解使用

接受參數(shù)的幾種傳輸方式以及幾種注解:

在上一篇中,我們使用了JDBC鏈接數(shù)據(jù)庫,完成了簡單的后端開發(fā)。但正如我在上文中拋出的問題,我們能不能更好的優(yōu)化我們在Controller中接受參數(shù)的方式呢?這一篇中我們就來聊一聊怎么更有效的接收Json參數(shù)。

傳輸參數(shù)的幾種Method

在定義一個Rest接口時,我們通常會使用GET,POST,PUT,DELETE幾種方式來完成我們所需要進行CRUD的一些操作,我們在這里羅列和教大家在實際開發(fā)中的使用,一些基本概念我們就不再贅述,例如使用POST的優(yōu)缺點,可使用參數(shù)的大小限制等地:

  • GET:一般用于查詢數(shù)據(jù),不辦函數(shù)據(jù)的更新以及插入操作。由于明文傳輸?shù)年P系,我們一般用來獲取一些無關用戶的信息。
  • POST:一般用于數(shù)據(jù)的插入操作,也是使用最多的傳輸方式,但是在H5調(diào)用時會有跨域的問題,一般使用JSONP來解決。
  • PUT:我們使用PUT方式來對數(shù)據(jù)進行更新操作。
  • DELETE:用于數(shù)據(jù)刪除,注意在數(shù)據(jù)庫內(nèi)是邏輯刪除(改變數(shù)據(jù)狀態(tài),用戶不再查詢得到,但還保留在數(shù)據(jù)庫內(nèi))還是物理刪除(真刪了)。

以上是很標準的REST風格的接口形式,其實我們可以進源碼看到,他們只不過封裝了

@RequestMapping(
method = {RequestMethod.POST}
)

這個方法,和我們使用以前的@RequestMapping后寫參數(shù)是一致的。但是在實際開發(fā)中我們一般是前后端分離開發(fā)的,像IOS以及ANDROID開發(fā)他們會固定使用同一套模版進行傳輸,這時可能你所有的接口都會是POST方法。這需要你在開發(fā)中事先和前端人員進行約定,這時接口文檔就會變得非常重要了。方法,入?yún)?,出參,報錯信息都必須清晰的描述在接口文檔中,所以不要小看編寫文檔的能力哦。當然,SpringBoot也為我們提供了強大的API模版,例如swagger。不過使用swagger也不是一勞永逸的,關于swagger,我們之后再聊。

獲取參數(shù)的幾種常用注解

在上一篇中我們使用了幾種注解來獲取參數(shù),例如@RequestParam,@PathVariable,@RequestBody。那我們現(xiàn)在來逐一看一下這些注解我們該如何使用。

  • @PathVariable:一般我們使用URI template樣式映射使用,即url/{param}這種形式,也就是一般我們使用的GET,DELETE,PUT方法會使用到的,我們可以獲取URL后所跟的參數(shù)。
  • @RequestParam:一般我們使用該注解來獲取多個參數(shù),在()內(nèi)寫入需要獲取參數(shù)的參數(shù)名即可,一般在PUT,POST中比較常用。
  • @RequestBody:該注解和@RequestParam殊途同歸,我們使用該注解將所有參數(shù)轉(zhuǎn)換,在代碼部分在一個個取出來,也是目前我使用到最多的注解來獲取參數(shù)(因為前端不愿意一個一個接口的調(diào)試)例如下代碼:
@PostMapping("/createUserByMap")
public void createUserByMap(@RequestBody Map<String,Object> reqMap){
    String tel = reqMap.get("tel").toString();
    String pwd = reqMap.get("pwd").toString();
    userService.createUser(tel,pwd);
}

當然,我們獲取參數(shù)不僅僅只有上面所提到的那些,還有@RequestHeader來獲取頭信息里的值,@CookieValue來獲取Cookie值等等。在這,我也僅僅說明一些較常用的取值方法而已。

使用對象直接獲取參數(shù)

當我們掌握以上幾種方式來獲取參數(shù)時,看似已經(jīng)毫無問題,其實還是有的,如果我們的入?yún)⑹侄嗄兀恳话賻资畟€參數(shù),你是血一百幾十個@RequestParam,還是@RequestBody之后取一百幾十個次呢?,明顯這些做法都十分麻煩,代碼太多,關鍵是我們懶啊……所以,我們也可以通過POJO來直接獲取參數(shù),之后通過GET方法直接把需要的參數(shù)取出就好。

我們來將上一次的方法給改變下:

/**
 * 添加用戶2
 * @param userInfo
 */
@PostMapping("/createUser2")
public void createUser2(UserInfo userInfo){
    userService.createUser(userInfo.getTel(),userInfo.getPassWord());
}

我們來測試一下,發(fā)現(xiàn)失敗了,通過錯誤信息,我們發(fā)現(xiàn)SQL提示password為null,也就是說我們沒有獲取到pwd這個參數(shù),這是因為如果使用對象接受參數(shù),那參數(shù)名必須喝對象的屬性名保持一致。

我們修改參數(shù)名為passWord后可以發(fā)現(xiàn),數(shù)據(jù)可以爭產(chǎn)的進行插入了。

使用@Valid對參數(shù)進行校驗

在使用對象進行參數(shù)接收時,我們可以對參數(shù)進行校驗,假設我們需要用戶輸入的密碼是整數(shù)型且在000000至999999之間的數(shù)值,我們可以對屬性passWord加上如下注解:

@Max(value = 999999,message = "超過最大數(shù)值")
@Min(value = 000000,message = "密碼設定不正確")
private String passWord;

這里舉的列子并不十分合適,請注意。我們只是針對表單驗證進行講解,在實際開發(fā)處理中要選擇合適的操作。message是反回的提示默認信息。
在controller中我們改寫一下,將返回值設為String,讓我們可以看到報錯信息。

然后我們給對象加入@Valid注解,并在參數(shù)中加入BindingResult來獲取錯誤信息。在邏輯處理中我們判斷BindingResult知否含有錯誤信息,如果有錯誤信息,則直接返回錯誤信息。

/**
 * 添加用戶2
 * @param userInfo
 */
@PostMapping("/createUser2")
public String createUser2(@Valid UserInfo userInfo, BindingResult bindingResult){
    if (bindingResult.hasErrors()){
        return bindingResult.getFieldError().getDefaultMessage();
    }
    userService.createUser(userInfo.getTel(),userInfo.getPassWord());
    return "OK";
}

我們繼續(xù)通過POSTMAN來測試一下,首先我們傳入-10000來設定密碼,發(fā)現(xiàn)提示錯誤密碼設定不正確:

發(fā)現(xiàn)無法完成用戶注冊,我們繼續(xù)通過添加密碼為1000000來設定密碼,發(fā)現(xiàn)提示錯誤信息超過最大數(shù)值:

以上就是我們通過簡單的表單驗證來預防一些惡意數(shù)據(jù)的侵入。不知道你有沒有掌握呢?當然,我們對于數(shù)據(jù)的驗證不僅僅只有表單驗證,我們一般通過數(shù)據(jù)簽名的方式來驗證一個請求是否合法,也可能是將整個參數(shù)進行對稱加密后進行傳輸以保證數(shù)據(jù)不被明文抓包。

那以上所說的處理模式就會用到Spring為我們提供的另一個強大的功能,也是我們使用Spring系列框架中不可或缺的一部分,AOP,切面編程。我們之前所說的統(tǒng)一報錯處理也是使用的AOP功能進行處理的,那關于AOP,我們下周再聊。(原諒我懶得要死,這篇文章也是被迫趕工的……捂臉,逃……)(???)?

以上所有的代碼我已經(jīng)上傳到GitHub

round1-springboot

如果心急的小伙伴也可以去clone我已經(jīng)完成的項目,這個項目中把一些常用功能都寫了,并且都寫注釋啦?。?!

MySpringBoot

總結(jié)

到此這篇關于SpringBoot開發(fā)詳解之Controller接收參數(shù)及參數(shù)校驗的文章就介紹到這了,更多相關SpringBoot Controller接收參數(shù)及校驗內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • java評論、回復功能設計與實現(xiàn)方法

    java評論、回復功能設計與實現(xiàn)方法

    很多項目或者系統(tǒng)都有評論或者回復的需求,但評論回復的實現(xiàn)往往都比較復雜,也不好實現(xiàn),下面這篇文章主要給大家介紹了關于java評論、回復功能設計與實現(xiàn)的相關資料,需要的朋友可以參考下
    2022-06-06
  • jsch中ChannelShell與ChannelExec的區(qū)別及說明

    jsch中ChannelShell與ChannelExec的區(qū)別及說明

    這篇文章主要介紹了jsch中ChannelShell與ChannelExec的區(qū)別及說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • 詳解java操作Redis數(shù)據(jù)庫的redis工具(RedisUtil,jedis工具JedisUtil,JedisPoolUtil)

    詳解java操作Redis數(shù)據(jù)庫的redis工具(RedisUtil,jedis工具JedisUtil,JedisPoo

    這篇文章主要介紹了java操作Redis數(shù)據(jù)庫的redis工具,包括RedisUtil,jedis工具JedisUtil,JedisPoolUtil工具,本文通過實例代碼給大家介紹的非常詳細,需要的朋友可以參考下
    2021-08-08
  • Java Flink窗口觸發(fā)器Trigger的用法詳解

    Java Flink窗口觸發(fā)器Trigger的用法詳解

    Trigger(窗口觸發(fā)器)決定了窗口(由 WindowAssigner 產(chǎn)生)什么時候調(diào)用窗口處理函數(shù)。可以根據(jù)指定的時間或數(shù)據(jù)元素條件來決定什么時候觸發(fā)。本文將詳細講講其用法,需要的可以參考一下
    2022-07-07
  • java編程之xpath介紹

    java編程之xpath介紹

    這篇文章主要介紹了java編程之xpath介紹,具有一定借鑒價值,需要的朋友可以參考下
    2017-12-12
  • Java關于遠程調(diào)試程序教程(以Eclipse為例)

    Java關于遠程調(diào)試程序教程(以Eclipse為例)

    這篇文章主要介紹了Java關于遠程調(diào)試程序教程(以Eclipse為例),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-06-06
  • Spring IOC 三種配置方式詳解

    Spring IOC 三種配置方式詳解

    這篇文章主要介紹了Spring IOC 三種配置方式,基于xml配置方式組件管理,基于注解方式管理和配置類方式管理,這三種方式,通過圖文講解的非常詳細,需要的朋友可以參考下
    2024-05-05
  • spring 定時任務@Scheduled詳解

    spring 定時任務@Scheduled詳解

    這篇文章主要介紹了spring 定時任務@Scheduled的相關資料,文中通過示例代碼介紹的很詳細,相信對大家的理解和學習具有一定的參考借鑒價值,有需要的朋友們下面來一起看看吧。
    2017-01-01
  • Idea 同一窗口導入多個項目的實現(xiàn)步驟

    Idea 同一窗口導入多個項目的實現(xiàn)步驟

    本文主要介紹了Idea 同一窗口導入多個項目的實現(xiàn)步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-07-07
  • 使用@Autowired可以注入ApplicationContext

    使用@Autowired可以注入ApplicationContext

    這篇文章主要介紹了使用@Autowired可以注入ApplicationContext問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-06-06

最新評論