日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

postmapping注解参数说明_从零搭建后端框架:优雅的参数校验Validator

發布時間:2024/7/23 编程问答 58 豆豆
生活随笔 收集整理的這篇文章主要介紹了 postmapping注解参数说明_从零搭建后端框架:优雅的参数校验Validator 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前兩天項目群里發生了關于參數校驗的問題討論,很多開發團隊沒有對這些做硬性規范時,還是有很多童鞋本著“不多事”的原則,產品文檔里沒有特別說明就不寫。對于2B的產品經理來說,因為一次新迭代,可能回涉及到N多的頁面,只會定一個通用的規范,特殊情況下會做特別說明。這其實也很考研程序員的開發習慣和技術能力,所以花少今天給大家分享下如何進行優雅的參數校驗

可能有些后端開發會覺得前端做好校驗就可以了,但是作為有經驗的程序員來說你不要相信產品經理、不要相信測試、也不要相信前端,你能信的只有自己。參數校驗是后端請求的第一道防線,不符合條件的請求,越在前面攔截掉,消耗的資源越少。

對參數進行校驗,我們可能會出現如下類似代碼:

@RestController

@RequestMapping("/user")

public class UserController extends BaseController {

@PostMapping("/add")

public ApiResult addUser(@RequestBody User user) {

if (user == null) {

return ApiResult.fail("對象不能為空");

}

if (StringUtils.isEmpty(user.getAccount()) || StringUtils.isEmpty(user.getPassword()) || StringUtils.isEmpty(user.getEmail())) {

return ApiResult.fail("賬號、密碼或郵箱不能為空");

}

if (user.getAccount().length() < 6 || user.getAccount().length() > 11) {

return ApiResult.fail("賬號長度必須是6-11個字符");

}

if (user.getPassword().length() < 6 || user.getPassword().length() > 16) {

return ApiResult.fail("密碼長度必須是6-16個字符");

}

if (!Pattern.matches("^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(.[a-zA-Z0-9_-]+)+$", user.getEmail())) {

return ApiResult.fail("郵箱格式不正確");

}

// 新增用戶操作

return ApiResult.success();

}

}

但是這樣總看起來像是初出茅廬的實習生寫的,作為有逼格的程序員還是要表現的高大上一點,接下來Spring Validator閃亮登場

1、Validator + BindResult

首先在對象上通過注解的方式定義校驗規則,并指定校驗失敗后的信息,如下:

@Getter

@Setter

public class User {

@NotNull(message = "用戶id不能為空")

private Long id;

@NotNull(message = "用戶賬號不能為空")

@Size(min = 6, max = 11, message = "賬號長度必須是6-11個字符")

private String account;

@NotNull(message = "用戶密碼不能為空")

@Size(min = 6, max = 11, message = "密碼長度必須是6-16個字符")

private String password;

@NotNull(message = "用戶郵箱不能為空")

@Email(message = "郵箱格式不正確")

private String email;

}

這里花少用了Lombok插件通過注解方式自動生成Getter、Setter方法,還是挺省事的,如果想要了解Lombok的更多花絮可以看花少之前的文章有介紹,但是就像之前有位讀者提到這個有個弊端就是需要下插件,如果是公司內部的大項目最好別用,否則別人也得下插件,萬一被噴就尷尬了,但是自己的項目隨便玩無所謂。

2、校驗規則定義完后,在接口上添加@Vaild注解和BindResult參數即可完成校驗,如下:

@RestController

@RequestMapping("/user")

public class UserController extends BaseController {

@PostMapping("/add")

public ApiResult addUser(@RequestBody @Valid User user, BindingResult bindingResult) {

// 參數校驗失敗,會將錯誤信息封裝成在BindingResult

for (ObjectError error : bindingResult.getAllErrors()) {

return ApiResult.fail(error.getDefaultMessage());

}

// 新增用戶操作

return ApiResult.success();

}

}

3、當我們在訪問接口時,未填寫用戶賬戶,則會返回如下結果:

{

"code": 500,

"data": null,

"message": "用戶賬號不能為空"

}

雖然使用該方式已經是非常方便的進行參數校驗方式了,但是當有多個接口需要進行參數驗證時,就需要在每個接口中添加參數BindingResult,看到這么多冗余代碼,作為有追求的程序員小哥肯定受不鳥,我們可以通過異常統一處理來解決這個問題。關于異常的統一處理今天就不過多介紹了,后面找時間專門寫一篇供大家賞閱

花有重開日,人無再少年 → 我是花少【少宮主花無缺】#更新不斷,下期繼續#走過路過記得留下關注和點贊(公眾號同名)!

總結

以上是生活随笔為你收集整理的postmapping注解参数说明_从零搭建后端框架:优雅的参数校验Validator的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。