色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

SpringBoot 后端接口規范(上)

jf_78858299 ? 來源:架構師 ? 作者:架構師 ? 2023-05-05 17:00 ? 次閱讀

一、前言

一個后端接口大致分為四個部分組成: 接口地址(url)、接口請求方式(get、post等)、請求數據(request)、響應數據(response) 。雖然說后端接口的編寫并沒有統一規范要求,而且如何構建這幾個部分每個公司要求都不同,沒有什么“一定是最好的”標準,但其中最重要的關鍵點就是看是否規范。

二、環境說明

因為講解的重點是后端接口,所以需要導入一個spring-boot-starter-web包,而lombok作用是簡化類,前端顯示則使用了knife4j,具體使用在Spring Boot整合knife4j實現Api文檔已寫明。另外從springboot-2.3開始,校驗包被獨立成了一個starter組件,所以需要引入如下依賴:



    org.springframework.bootclass="hljs-name"groupId>
    spring-boot-starter-validationclass="hljs-name"artifactId>
class="hljs-name"dependency>


    com.github.xiaoyminclass="hljs-name"groupId>
    knife4j-spring-boot-starterclass="hljs-name"artifactId>
    
    2.0.2class="hljs-name"version>
class="hljs-name"dependency>


    org.springframework.bootclass="hljs-name"groupId>
    spring-boot-starter-webclass="hljs-name"artifactId>
class="hljs-name"dependency>


    org.projectlombokclass="hljs-name"groupId>
    lombokclass="hljs-name"artifactId>
    trueclass="hljs-name"optional>
class="hljs-name"dependency>

三、參數校驗

1、介紹

一個接口一般對參數(請求數據)都會進行安全校驗,參數校驗的重要性自然不必多說,那么如何對參數進行校驗就有講究了。一般來說有三種常見的校驗方式,我們使用了最簡潔的第三種方法

  • 業務層校驗
  • Validator + BindResult校驗
  • Validator + 自動拋出異常

業務層校驗無需多說,即手動在java的Service層進行數據校驗判斷。不過這樣太繁瑣了,光校驗代碼就會有很多

而使用Validator+ BindingResult已經是非常方便實用的參數校驗方式了,在實際開發中也有很多項目就是這么做的,不過這樣還是不太方便,因為你每寫一個接口都要添加一個BindingResult參數,然后再提取錯誤信息返回給前端(簡單看一下)。

@PostMapping("/addUser")
public String addUser(@RequestBody @Validated User user, BindingResult bindingResult) {
    // 如果有參數校驗失敗,會將錯誤信息封裝成對象組裝在BindingResult里
    List

2、Validator + 自動拋出異常(使用)

內置參數校驗如下:

首先Validator可以非常方便的制定校驗規則,并自動幫你完成校驗。首先在入參里需要校驗的字段加上注解,每個注解對應不同的校驗規則,并可制定校驗失敗后的信息:

@Data
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;
}

校驗規則和錯誤提示信息配置完畢后,接下來只需要在接口僅需要在校驗的參數上加上@Valid注解(去掉BindingResult后會自動引發異常,異常發生了自然而然就不會執行業務邏輯):

@RestController
@RequestMapping("user")
public class ValidationController {

    @Autowired
    private ValidationService validationService;

    @PostMapping("/addUser")
    public String addUser(@RequestBody @Validated User user) {

        return validationService.addUser(user);
    }
}

現在我們進行測試,打開knife4j文檔地址,當輸入的請求數據為空時,Validator會將所有的報錯信息全部進行返回,所以需要與全局異常處理一起使用。

// 使用form data方式調用接口,校驗異常拋出 BindException
// 使用 json 請求體調用接口,校驗異常拋出 MethodArgumentNotValidException
// 單個參數校驗異常拋出ConstraintViolationException
// 處理 json 請求體調用接口校驗失敗拋出的異常
@ExceptionHandler(MethodArgumentNotValidException.class)
public ResultVO

3、分組校驗和遞歸校驗

分組校驗有三個步驟:

  • 定義一個分組類(或接口)
  • 在校驗注解上添加groups屬性指定分組
  • Controller方法的@Validated注解添加分組類
public interface Update extends Default{
}
@Data
public class User {
    @NotNull(message = "用戶id不能為空",groups = Update.class)
    private Long id;
  ......
}
@PostMapping("update")
public String update(@Validated({Update.class}) User user) {
    return "success";
}

如果Update不繼承Default,@Validated({Update.class})就只會校驗屬于Update.class分組的參數字段;如果繼承了,會校驗了其他默認屬于Default.class分組的字段。

對于遞歸校驗(比如類中類),只要在相應屬性類上增加@Valid注解即可實現(對于集合同樣適用)

4、自定義校驗

Spring Validation允許用戶自定義校驗,實現很簡單,分兩步:

  • 自定義校驗注解
  • 編寫校驗者類
@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE })
@Retention(RUNTIME)
@Documented
@Constraint(validatedBy = {HaveNoBlankValidator.class})// 標明由哪個類執行校驗邏輯
public @interface HaveNoBlank {

    // 校驗出錯時默認返回的消息
    String message() default "字符串中不能含有空格";
    Class?[] groups() default { };
    Class? extends Payload[] payload() default { };
    /**
     * 同一個元素上指定多個該注解時使用
     */
    @Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE })
    @Retention(RUNTIME)
    @Documented
    public @interface List {
        NotBlank[] value();
    }
}
public class HaveNoBlankValidator implements ConstraintValidator<HaveNoBlank, String> {
    @Override
    public boolean isValid(String value, ConstraintValidatorContext context) {
        // null 不做檢驗
        if (value == null) {
            return true;
        }
        // 校驗失敗
        return !value.contains(" ");
        // 校驗成功
    }
}

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 數據
    +關注

    關注

    8

    文章

    7128

    瀏覽量

    89364
  • URL
    URL
    +關注

    關注

    0

    文章

    139

    瀏覽量

    15414
  • 后端
    +關注

    關注

    0

    文章

    31

    瀏覽量

    2285
  • SpringBoot
    +關注

    關注

    0

    文章

    174

    瀏覽量

    189
收藏 人收藏

    評論

    相關推薦

    SpringBoot中的Druid介紹

    SpringBoot中Druid數據源配置
    發表于 05-07 09:21

    SpringBoot知識總結

    SpringBoot干貨學習總結
    發表于 08-01 10:40

    怎么學習SpringBoot

    SpringBoot學習之路(X5)- 整合JPA
    發表于 06-10 14:52

    怎樣去使用springboot

    怎樣去使用springboot呢?學習springboot需要懂得哪些?
    發表于 10-25 07:13

    SpringBoot應用啟動運行run方法

    什么時候創建嵌入式的Servlet容器工廠?什么時候獲取嵌入式的Servlet容器并啟動Tomcat;獲取嵌入式的Servlet容器工廠:1)、SpringBoot應用啟動運行run方法2
    發表于 12-20 06:16

    基于DSP控制的電力線通信模擬前端接口設計

    基于DSP控制的電力線通信模擬前端接口設計
    發表于 10-20 15:51 ?5次下載
    基于DSP控制的電力線通信模擬前<b class='flag-5'>端接口</b>設計

    數字接口—單端接口與差動接口的對比

    數字接口—單端接口與差動接口的對比
    發表于 11-07 08:07 ?0次下載
    數字<b class='flag-5'>接口</b>—單<b class='flag-5'>端接口</b>與差動<b class='flag-5'>接口</b>的對比

    什么是 SpringBoot?

    本文從為什么要有 `SpringBoot`,以及 `SpringBoot` 到底方便在哪里開始入手,逐步分析了 `SpringBoot` 自動裝配的原理,最后手寫了一個簡單的 `start` 組件,通過實戰來體會了 `
    的頭像 發表于 04-07 11:28 ?1344次閱讀
    什么是 <b class='flag-5'>SpringBoot</b>?

    SpringBoot的核心注解1

    今天跟大家來探討下SpringBoot的核心注解@SpringBootApplication以及run方法,理解下springBoot為什么不需要XML,達到零配置
    的頭像 發表于 04-07 14:34 ?722次閱讀
    <b class='flag-5'>SpringBoot</b>的核心注解1

    SpringBoot的核心注解2

    今天跟大家來探討下SpringBoot的核心注解@SpringBootApplication以及run方法,理解下springBoot為什么不需要XML,達到零配置
    的頭像 發表于 04-07 14:34 ?1979次閱讀
    <b class='flag-5'>SpringBoot</b>的核心注解2

    SpringBoot 后端接口規范(中)

    一個后端接口大致分為四個部分組成: 接口地址(url)、接口請求方式(get、post等)、請求數據(request)、響應數據(response) 。雖然說后端接口的編寫并沒有統一
    的頭像 發表于 05-05 17:01 ?668次閱讀
    <b class='flag-5'>SpringBoot</b> <b class='flag-5'>后端接口</b><b class='flag-5'>規范</b>(中)

    SpringBoot 后端接口規范(下)

    一個后端接口大致分為四個部分組成:接口地址(url)、接口請求方式(get、post等)、請求數據(request)、響應數據(response)。雖然說后端接口的編寫并沒有統一
    的頭像 發表于 05-05 17:02 ?645次閱讀

    后端分離必備的接口規范

    隨著互聯網的高速發展,前端頁面的展示、交互體驗越來越靈活、炫麗,響應體驗也要求越來越高,后端服務的高并發、高可用、高性能、高擴展等特性的要求也愈加苛刻,從而導致前后端研發各自專注于自己擅長的領域深耕細作。
    的頭像 發表于 05-15 17:16 ?886次閱讀
    前<b class='flag-5'>后端</b>分離必備的<b class='flag-5'>接口</b><b class='flag-5'>規范</b>

    springboot后端交互流程

    Boot 進行開發時,前后端交互是一個非常重要的部分,本文將詳細介紹 Spring Boot 前后端交互的流程。 前后端交互的基本原理 在前后端交互的過程中,前端負責向
    的頭像 發表于 11-22 16:00 ?2222次閱讀

    一個注解搞定SpringBoot接口防刷

    技術要點:springboot的基本知識,redis基本操作,
    的頭像 發表于 11-28 10:46 ?422次閱讀
    主站蜘蛛池模板: 大地影院日本韩国电影免费观看| 大桥未久电影在线| 风情韵味人妻HD| 欧美性黑吊xxx| AV天堂AV亚洲啪啪久久无码| 久久精品亚洲AV高清网站性色| 亚洲性夜夜夜色综合网| 好男人好资源在线播放| 亚洲不卡视频在线| 果冻传媒视频在线观看完整版免费 | 尤物国产在线精品三区| 黄色a级免费网站| 一级am片欧美| 久久亚洲这里只有精品18| 最近日本MV字幕免费观看视频| 麻豆高潮AV久久久久久久| 99国产精品人妻无码免费| 亲胸摸下面激烈免费网站| 出租屋自拍贵在真实15P| 偷窥欧美wc经典tv| 琪琪电影午夜理论片77网| a视频在线观看免费| 日本肉肉口番工全彩动漫| 国产 亚洲 中文字幕 在线| 亚洲精品无码一区二区三区四虎| 国产网红主播精品福利大秀专区| 亚洲精品中文字幕在线| 快播电影网址| 草莓湿漉漉是好事还是恶性| 熟女理发厅| 九九热精品视频在线观看| 4438成人情人网站| 日本妞欧洲| 国产综合91| 91九色视频无限观看免费| 涩涩网站在线看| 精品无码国产自产在线观看水浒传| 中文字幕人成人乱码亚洲影视| 日本色呦呦| 精品国产免费第一区二区| OLDMAN老头456 TUBE|