Java項目實現報文數據校驗注解方式(必輸項、值大小)

普通項目

  • 導入校驗依賴

        <dependency><groupId>org.hibernate</groupId><artifactId>hibernate-validator</artifactId><version>4.1.0.Final</version></dependency><dependency><groupId>javax.validation</groupId><artifactId>validation-api</artifactId><version>2.0.1.Final</version></dependency>
  • 編寫校驗工具(使用validator框架校驗工具)

package com.csvn.utils;import com.csvn.blogs.dto.BlogFileDto;
import org.hibernate.validator.HibernateValidator;import javax.validation.ConstraintViolation;
import javax.validation.Validation;
import javax.validation.Validator;
import java.util.Set;
import java.util.stream.Collectors;/*** @author haizhuangbu* @date 2024/5/14 12:56* @mark ValidatorUtils 校驗工具*/
public class ValidatorUtils {private static Validator validator;private static final Object lockObj = new Object();/*** @param o* @return 返回異常信息*/public static String validator(Object o) {Validator validation = getValidation();Set<ConstraintViolation<Object>> validate = validation.validate(o);String errMessage = validate.stream().map(va -> va.getPropertyPath() + " : " + va.getMessage()).collect(Collectors.joining(","));return errMessage;}private static Validator getValidation() {if (validator == null) {synchronized (lockObj) {validator = Validation.byProvider(HibernateValidator.class).configure().buildValidatorFactory().getValidator();}}return validator;}}
  • 測試

  • 定義實體類

    package com.csvn.blogs.dto;import com.fasterxml.jackson.annotation.JsonFormat;
    import io.swagger.annotations.ApiModel;
    import io.swagger.annotations.ApiModelProperty;
    import lombok.Data;
    import org.hibernate.validator.constraints.NotBlank;import javax.validation.Valid;
    import java.util.Date;/*** @author haizhuangbu* @date 2024/4/24 21:29* @mark BlogFIleDto*/
    @Data
    @ApiModel("文件信息")
    @Valid
    public class BlogFileDto {@ApiModelProperty("文件id")@NotBlank(message = "文件id不能為空")private String fileId;@ApiModelProperty("文件名稱")@NotBlank(message = "文件名稱不能為空")private String fileName;@ApiModelProperty("文件路徑")private String filePath;@ApiModelProperty("文件狀態 Y 有效 N 失效")private String fileSts;@JsonFormat(pattern = "yyyy-MM-dd hh:mm:ss")@ApiModelProperty("創建日期")private Date createTime;}
    
  • 調用工具校驗

        BlogFileDto blogFileDto = new BlogFileDto();String validator1 = ValidatorUtils.validator(blogFileDto);System.out.println(validator1);
  • 測試效果


????????

SpringBoot項目

  • 導入依賴

    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-validation</artifactId>
    <version>2.2.10.RELEASE</version>
    </dependency>
  • 接口使用(在接口實體類直接添加@Valid注解)

        @PostMapping("/saveContent")public Result<String> saveContentInfo(@Valid @RequestBody ContentInfo contentInfo) {blogsContentInfoService.insertContentInfo(contentInfo);return Result.of("內容插入成功");}
  • 通過異常攔截 @ControllerAdvice 獲取校驗異常

    package com.csvn.common;import org.springframework.context.support.DefaultMessageSourceResolvable;
    import org.springframework.validation.ObjectError;
    import org.springframework.web.bind.MethodArgumentNotValidException;
    import org.springframework.web.bind.annotation.ControllerAdvice;
    import org.springframework.web.bind.annotation.ExceptionHandler;
    import org.springframework.web.bind.annotation.RestControllerAdvice;import java.util.stream.Collectors;/*** @author haizhuangbu* @date 2024/5/14 17:10* @mark RequestAdivce*/
    @RestControllerAdvice
    public class RequestAdvice {/*** @param methodArgumentNotValidException 方法參數校驗異常* @return 異常信息*/@ExceptionHandler(value = MethodArgumentNotValidException.class)public Result methodError(MethodArgumentNotValidException methodArgumentNotValidException) {String errorMsg = methodArgumentNotValidException.getBindingResult().getAllErrors().stream().map(DefaultMessageSourceResolvable::getDefaultMessage).collect(Collectors.joining(","));return Result.error(errorMsg);}}
    

    拓展自定義實現參數校驗(字典項校驗)?

  • 自定義實現注解

    package com.csvn.utils.common;import javax.validation.Constraint;
    import javax.validation.ConstraintValidator;
    import javax.validation.ConstraintValidatorContext;
    import javax.validation.Payload;
    import java.lang.annotation.ElementType;
    import java.lang.annotation.Retention;
    import java.lang.annotation.RetentionPolicy;
    import java.lang.annotation.Target;@Constraint(validatedBy = {NotInMap.NotInMapImp.class}
    )
    @Target({ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE, ElementType.CONSTRUCTOR, ElementType.PARAMETER, ElementType.TYPE_USE})
    @Retention(RetentionPolicy.RUNTIME)
    public @interface NotInMap {String key(); // 字典碼值String message() default "不存在字典項";Class<?>[] groups() default {};Class<? extends Payload>[] payload() default {};}
    

  • 自定義校驗規則??

    class NotInMapImp implements ConstraintValidator<NotInMap, String> {String key;@Overridepublic void initialize(NotInMap annotation) {key = annotation.key();ConstraintValidator.super.initialize(annotation);}@Overridepublic boolean isValid(String value, ConstraintValidatorContext context) {// 查詢數據庫 通過key// select * from s_cde where key = #{key}return false; // obj == null}}
  • 最終結果

詳細校驗項(最大值、最小值....注解)https://mp.csdn.net/mp_blog/creation/editor/135977372

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/12304.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/12304.shtml
英文地址,請注明出處:http://en.pswp.cn/web/12304.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Docker安裝Redis,并在 Visual Studio Code 中使用它

Docker安裝Redis 查找Redis docker search Redis完整結果 PS C:\Users\cheng> docker search Redis NAME DESCRIPTION STARS OFFICIAL redis Redis is an open …

System V IPC(進程間通信)機制詳解

文章目錄 一、引言二、System V IPC的基本概念1、IPC結構的引入2、IPC標識符&#xff08;IPC ID&#xff09;3、S ystem V的優缺點 三、共享內存&#xff08;Shared Memory&#xff09;1、共享內存的基本概念2、共享內存的創建&#xff08;shmget&#xff09;3、共享內存的附加…

C++:并發保護

一、前言 本文將會通過保護一個數據討論&#xff1a;互斥鎖、雙重檢查鎖、 std::once_flag 類、 std::call_once() 函數、單例模式、使用局部靜態變量實現單例模式等。 二、保護共享數據 假設我們需要某個共享數據&#xff0c;而它創建起來開銷不菲。因為創建它可能需要建立…

vim中的替換

:[range]s/pattern/replacement/flags 這里各部分的含義是&#xff1a; :[range]&#xff1a;可選的行范圍&#xff0c;用于指定在哪些行之間進行替換。如果省略&#xff0c;則默認為當前行。例如&#xff0c;1,10 表示在第1行到第10行之間替換&#xff0c;% 表示在整個文件中…

python的文件操作及函數式編程介紹

五、文件操作 1、讀取鍵盤輸入 input 獲取標準輸入&#xff0c;數據類型統一為字符串 #!/usr/bin/python # -*- coding: UTF-8 -*- str input("請輸入&#xff1a;") print&#xff08;"你輸入的內容是: ", str&#xff09; 這會產生如下的對應著輸入的…

KeyShot 2023.3 Pro for mac/win:完美融合3D渲染與動畫制作

在當今數字化時代&#xff0c;視覺內容的創作和表現越來越受到重視。無論是產品設計、建筑規劃&#xff0c;還是影視特效&#xff0c;都需要具備出色的3D渲染和動畫制作工具來展現創意和想法。而作為業內領先的3D渲染和動畫制作軟件之一&#xff0c;KeyShot 2023.3 Pro在這個領…

電腦剛開機的時候不卡,用一會就變卡頓了…怎么回事?

前言 昨天咱們聊到舊電腦更換了固態硬盤之后&#xff0c;開機就會變快的事情&#xff0c;這個確實是可行且有效的升級電腦辦法之一。 看完這篇之后&#xff0c;切莫著急升級電腦硬件配置&#xff0c;因為這里的坑比你想象的還要多。 從機械硬盤測試的數據和固態硬盤的測試數…

類與面向對象編程(Object-Oriented Programming, OOP)

類與面向對象編程&#xff08;Object-Oriented Programming, OOP&#xff09;&#xff08;一&#xff09; 對象比較&#xff1a;‘is’ 對比 ‘’ 當我還是個孩子的時候&#xff0c;我們的鄰居擁有一對雙胞胎貓咪。它們看起來幾乎一模一樣—同樣的炭黑色毛發和同樣銳利的綠色…

2024年港口危貨安全管理證報名條件

危化品安全員證報考條件 1、職業道德良好&#xff0c;身體健康&#xff0c;年齡不超過60周歲(法定代表人除外). 2、建筑施工企業的在職人員。 3、學歷及要求: (1)建筑施工企業主要負責人應為大專以上學歷&#xff0c;需大專以上學歷&#xff0c;除企業法人外&#xff0c;其他…

linux進階高級配置,你需要知道的有哪些(11)-YUM倉庫服務與PXE網絡裝機

1、基于RPM包構建的軟件更新機制 可以自動解決依賴關系 所有軟件包由集中的YUM軟件倉庫提供 2、軟件倉庫的提供方式 FTP服務&#xff1a;ftp://...... HTTP服務&#xff1a;http://...... 本地目錄&#xff1a;file:///...... 3、客戶端YUM命令 &#xff08;1&#xff0…

從CSDN搬家到微信公眾號

博主將會在微信公眾號里不斷輸出精品內容&#xff0c;陪伴大家共同成長。 如果你對博主的經歷感興趣&#xff0c;或者對博主的IT技術感興趣&#xff0c;歡迎關注我的微信公眾號&#xff0c;閱讀我的技術文章&#xff0c;免費獲取各種IT資源。也可以加我的微信成為我的好友&…

檔案數字化加工是如何利用檔案的

檔案數字化加工是將紙質檔案轉化為數字形式&#xff0c;并進行后續的加工和利用。通過檔案數字化加工&#xff0c;可以實現以下幾個方面的利用&#xff1a; 1. 存儲和保護&#xff1a;數字化檔案可以將大量的紙質檔案存儲在數字存儲介質中&#xff0c;從而節省空間和維護成本。…

TypeScript學習日志-第二十五天(編寫發布訂閱模式)

編寫發布訂閱模式 這是更具訂閱模式寫的代碼 可以理解訂閱模式的思想 interface I {events:Map<string,Function[]>once:(event:string,callback:Function)>void // 觸發一次on:(event:string,callback:Function)>void // 訂閱emit:(event:string,...args:any[])…

FileUpload控件

FileUpload控件是一個在Web應用程序中常用的界面元素&#xff0c;它允許用戶從客戶端選擇文件&#xff0c;并將該文件上傳到Web服務器。以下是關于FileUpload控件的一些詳細信息&#xff1a; 基本功能&#xff1a;FileUpload控件通常顯示為一個文本框和一個“瀏覽”按鈕。用戶…

面試算法之哈希專題

贖金信 class Solution { public:bool canConstruct(string ransomNote, string magazine) {// 小寫字母int r_cnt[26];int m_cnt[26];for(int i 0; i< magazine.size(); i) {m_cnt[magazine[i]-a]; // 統計}// 對比for(int i 0; i< ransomNote.size(); i) {if(m_cnt[r…

使用vant-ui+vue3實現一個可復用的評星組件

如圖所示 有兩種情況 一種是5顆星 一種是3顆星 官網上只提供了圖標類型的 并沒有加文字 https://femessage-vant.netlify.app/#/zh-CN/ 自己結合兩種情況 在全局注冊了此組件(后續還會持續更新代碼~) <template><div class"vant_rate_wrapper"><van…

【Javaer學習Python】 1、Django安裝

安裝 Python 和 PyCharm 的方法就略過了&#xff0c;附一個有效激活PyCharm的鏈接&#xff1a;https://www.quanxiaoha.com/pycharm-pojie/pycharm-pojie-20241.html 1、安裝Django # 安裝Django pip install Django# 查看當前版本 python -m django --version 5.0.62、創建項…

HTML常用標簽-表格標簽

表格標簽 1 常規表格2 單元格跨行3 單元格跨行 1 常規表格 table標簽 代表表格 thead標簽 代表表頭 可以省略不寫 tbody標簽 代表表體 可以省略不寫 tfoot標簽 代表表尾 可以省略不寫 tr標簽 代表一行 td標簽 代表行內的一格 th標簽 自帶加粗和居中效果的td 代碼 <h…

探索數據結構:堆的具體實現與應用

?? 歡迎大家來到貝蒂大講堂?? &#x1f388;&#x1f388;養成好習慣&#xff0c;先贊后看哦~&#x1f388;&#x1f388; 所屬專欄&#xff1a;數據結構與算法 貝蒂的主頁&#xff1a;Betty’s blog 1. 堆的概念 堆(Heap)是計算機科學中一類特殊的數據結構。堆通常是一個…

C++ QT設計模式 (第二版)

第3章 Qt簡介 3.2 Qt核心模塊 Qt是一個大庫&#xff0c;由數個較小的庫或者模塊組成&#xff0c;最為常見的如下&#xff1a;core、gui、xml、sql、phonon、webkit&#xff0c;除了core和gui&#xff0c;這些模塊都需要在qmake的工程文件中啟用 QTextStream 流&#xff0c;Qdat…