使用自定義注解進行restful請求參數(shù)的校驗方式
自定義注解進行restful請求參數(shù)的校驗
在使用springmvc開發(fā)的時候,我們通常會在controller中的方法參數(shù)實體類中加上@NotNull()等類似注解,然后在方法參數(shù)上加上
@Vilad 注解,這樣在有請求的時候,就會自動按照我們的注解進行參數(shù)是否合法,避免了我們手工的校驗。
但是,自帶的校驗注解有的時候并不能滿足我們的業(yè)務(wù)驗證需求,因此,我們就有必要進行自定義校驗注解,以業(yè)務(wù)為需求定制我們
自己的校驗注解。
下面我們來看一個例子:
1、首先我們使用@interface定義一個注解
@Target( { METHOD, FIELD, ANNOTATION_TYPE }) @Retention(RUNTIME) @Constraint(validatedBy = ByteLengthValidator.class)// 使用@Constraint指定注解校驗實現(xiàn)類,這是一個限制型注解,只能使用指定的實現(xiàn)類 @Documented public @interface ByteLength { int min() default 0; int max() default 2147483647; String charsetName() default "GBK"; String message() default "的長度只能在{min}和{max}之間"; Class<?>[] groups() default {}; Class<? extends Payload>[] payload() default {}; }
2、實現(xiàn)注解實現(xiàn)類(和@interface定義的注解在同一個包下)
注解實現(xiàn)類需要實現(xiàn)ConstraintValidator 接口
public class ByteLengthValidator implements ConstraintValidator<ByteLength, String>{ // 實現(xiàn)ConstraintValidator int min; int max; String charsetName; @Override public void initialize(ByteLength constraintAnnotation) { this.min = constraintAnnotation.min(); this.max = constraintAnnotation.max(); this.charsetName = constraintAnnotation.charsetName(); } @Override public boolean isValid(String value, ConstraintValidatorContext context) { // 實現(xiàn)校驗規(guī)則 if (null == value) { return min <= 0; } try { int length = value.getBytes(charsetName).length; return length >= min && length <= max; } catch (UnsupportedEncodingException e) { e.printStackTrace(); return false; } } }
3、在需要校驗的對象的字段上加上@ByteLength注解
然后在接口方法的該對象參數(shù)上加上@Vilad 注解,在接收的請求的時候,就會使用
我們自定義的@ByteLength 進行校驗該字段。
springboot小技巧:restful接口參數(shù)校驗,自定義校驗規(guī)則
restful風(fēng)格接口參數(shù)校驗
在接收參數(shù)的實體類的屬性上添加默認(rèn)的注解或者自定義注解
自定義參數(shù)校驗注解方法
1>定義自定義注解
2>定義參數(shù)校驗邏輯的處理類
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家.
相關(guān)文章
Spring注解@Configuration和@Component區(qū)別詳解
@Component和@Configuration都可以作為配置類,之前一直都沒覺得這兩個用起來有什么差別,可能有時程序跑的和自己想的有所區(qū)別也沒注意到,下面這篇文章主要給大家介紹了關(guān)于Spring注解@Configuration和@Component區(qū)別的相關(guān)資料,需要的朋友可以參考下2023-04-04IntelliJ IDEA(2020.2)的下載、安裝步驟詳細(xì)教程
這篇文章主要介紹了IntelliJ IDEA(2020.2)的下載、安裝步驟詳細(xì)教程,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-08-08利用Spring?boot+LogBack+MDC實現(xiàn)鏈路追蹤
這篇文章主要介紹了利用Spring?boot+LogBack+MDC實現(xiàn)鏈路追蹤,MDC?可以看成是一個與當(dāng)前線程綁定的哈希表,可以往其中添加鍵值對,下文詳細(xì)介紹需要的小伙伴可以參考一下2022-04-04idea使用pagehelper實現(xiàn)后端分頁功能的步驟詳解
這篇文章主要介紹了idea使用pagehelper實現(xiàn)后端分頁功能的步驟,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-09-09在Java中使用redisTemplate操作緩存的方法示例
這篇文章主要介紹了在Java中使用redisTemplate操作緩存的方法示例,在Redis中可以存儲String、List、Set、Hash、Zset。感興趣的可以了解一下2019-01-01spring cloud gateway 全局過濾器的實現(xiàn)
全局過濾器作用于所有的路由,不需要單獨配置,我們可以用它來實現(xiàn)很多統(tǒng)一化處理的業(yè)務(wù)需求,這篇文章主要介紹了spring cloud gateway 全局過濾器的實現(xiàn),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-03-03