国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【Java】在實體類中常用的注解校驗

這篇具有很好參考價值的文章主要介紹了【Java】在實體類中常用的注解校驗。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

1、常用注解:

注解 說明
@Null 只能為null
@NotNull(message = “id不能為空”) 必須不為null,可以為空字符串
@Min(value) 必須為一個不小于指定值的數(shù)字
@Max(value) 必須為一個不大于指定值的數(shù)字
@NotBlank(message = “姓名不能為空”) 驗證注解的元素值不為空(不為null、去除首位空格后長度為0),不同于@NotEmpty,@NotBlank只應(yīng)用于字符串且在比較時會去除字符串的空格
@NotEmpty 驗證注解的元素值不為null且不為空(字符串長度不為0、集合大小不為0)
@AssertFalse 必須為false
@AssertTrue 必須為true
@DecimalMax(value) 必須為一個不大于指定值的數(shù)字
@DecimalMin(value) 必須為一個不小于指定值的數(shù)字
@Digits(integer,fraction) 必須為一個小數(shù),且整數(shù)部分的位數(shù)不能超過integer,小數(shù)部分的位數(shù)不能超過fraction
@Future 必須是一個將來的日期
@Past 必須是一個過去的日期
@Pattern(regexp = “^(正則表達式)$”, message = “身份證格式錯誤”) 必須符合指定的正則表達式
@Size(max,min,message = “l(fā)ist大小不可為0”) 字符長度必須在min到max之間
@Length(min = 1,max = 4, message = “用戶名不能超過4個字符”) 被限制的字符串的大小必須在指定的范圍內(nèi),一般用在 String 類型上可對字段數(shù)值進行最大長度限制的控制。
@Email 驗證注解的元素值是Email,也可以通過正則表達式和flag指定自定義的email格式
@Range(min = 60,max = 80,message = “年齡必須要60到80之間,60=<年齡=<80”) 被注釋的元素必須在合適的范圍內(nèi),一般用在 Integer 類型上可對字段數(shù)值進行大小范圍的控制。

@NotEmpty、@NotBlank 以及 @NotNull 注解的使用:

@NotEmpty 用在集合或數(shù)組上面,一般用來校驗List類型(不能注釋枚舉),而且長度必須大于0
@NotBlank 用在String上面,一般用來校驗String類型不能為空,而且調(diào)用trim()后,長度必須大于0。
@NotNull 用在所有類型上面,一般用來校驗Integer類型不能為空,但可以為empty。
需要搭配@Valid使用,在檢驗Controller的入?yún)⑹欠穹弦?guī)范時

@JsonFormat注解:

可以約束時間的接收格式和響應(yīng)格式 (接收和響應(yīng)的都是JSON字符串),將日期類型數(shù)據(jù)在JSON格式和java.util.Date對象之間轉(zhuǎn)換 (前端傳參是json字符串格式,后端返參也是json字符串格式,JsonFormat注解會自動轉(zhuǎn)化成data格式進行處理)。與傳輸方向沒有關(guān)系(前端到后端or后端到前端都可以使用)

使用 @JsonFormat 注解時,查到的時間可能會比數(shù)據(jù)庫中的時間少八個小時,這是由于時區(qū)差引起的,JsonFormat 默認(rèn)的時區(qū)是 Greenwich Time, 默認(rèn)的是格林威治時間,而我們是在東八區(qū)上,所以時間會比實際我們想得到的時間少八個小時。需要在后面加上一個時區(qū),如下示例:

@JsonFormat(pattern="yyyy-MM-dd",timezone="GMT+8")
private Date date;

常用注解屬性:

名稱 作用
pattern 約定時間格式:pattern=“yyyy-MM-dd HH:mm:ss”
timezone 指定具體時區(qū): timezone = “GMT+8” or timezone = “Asia/Shanghai”

@DateTimeFormat注解:

可對java.util.Date、java.uitl.calendar、java.long.Long及Joda時間類型的屬性進行標(biāo)注,主要處理前端時間類型與后端pojo對象中的成員變量進行數(shù)據(jù)綁定,所約束的時間格式并不會影響后端返回前端的時間類型數(shù)據(jù)格式(前端傳參是json字符串格式,后端返參也是json字符串格式,DateTimeFormat注解會自動轉(zhuǎn)化成data格式進行處理)

注意:前端入?yún)?shù)據(jù)的時間格式必須與注解中定義的時間格式相同,不然會報錯,如:@DateTimeFormat(pattern = “yyyy-MM-dd HH:mm”) 則入?yún)⒌母袷奖仨殲?2020-6-4 10:43";

常用注解屬性:

名稱 作用
iso 類型為DateTimeFormat.ISO,常用值:DateTimeFormat.ISO.DATE:格式為yyyy-MM-ddDateTimeFormat.ISO.DATE_TIME:格式為yyyy-MM-dd hh:mm:ss.SSSZDateTimeFormat.ISO.TIME:格式為hh:mm:ss.SSSZDateTimeFormat.ISO.NONE:表示不使用ISO格式的時間(默認(rèn)值)
pattern 類型為String,使用自定義時間格式化字符串,如"yyyy-MM-dd hh:mm:ss"
style 類型為String,通過樣式指定日期時間的格式,由兩位字符組成,第一位表示日期的樣式,第二位表示時間的格式,以下是幾個常用的可選值:S:短日期/時間的樣式M:中日期/時間的樣式L:短日期/時間的樣式F:完整日期/時間的樣子-:忽略日期或時間的樣式默認(rèn)值 style=“SS”

@JsonFormat 和 @DateTimeFormat 區(qū)別

@JsonFormat既可以約束前端傳入的時間類型參數(shù)格式,也可以約束后端響應(yīng)前端的時間類型格式;

@DateTimeFormat :

  • 只能約束前端入?yún)r間類型的格式,并不會修改原有的日期對象的格式,如果想要獲得期望的日期格式,是需要自己手動轉(zhuǎn)換的;
  • 如果單獨使用@DateTimeFormat 時,響應(yīng)給前端的時間會比實際時間晚8個小時(時區(qū)原因)

參考鏈接:https://blog.csdn.net/zhuzicc/article/details/106529485

@ApiModelProperty()注解:用于方法,字段; 表示對屬性的說明或者數(shù)據(jù)操作更改

value–字段說明
name–重寫屬性名字 ,
dataType–重寫屬性類型
required–是否必填
example–舉例說明
hidden–隱藏

@ApiModel(value="user對象",description="用戶對象user")
public class User implements Serializable{
    private static final long serialVersionUID = 1L;
     @ApiModelProperty(value="用戶名",name="username",example="xingguo")
     private String username;
     @ApiModelProperty(value="狀態(tài)",name="state",required=true)
      private Integer state;
      private String password;
      private String nickName;
      private Integer isDeleted;

      @ApiModelProperty(value="id數(shù)組",hidden=true)
      private String[] ids;
      private List<String> idList;
     //省略get/set
}

一些校驗注解的使用:

java實體類字段json注解有哪些,業(yè)務(wù)所需,java,筆記

2、使用案例(@Valid注解的使用):

@valid注解主要用于數(shù)據(jù)校驗,可定義在兩種地方。

  1. 定義實體類中的屬性上,添加不同的注解來完成不同的校驗規(guī)則。

  2. 定義在接口類中,在接收參數(shù)前添加@Valid注解,開啟實體類的校驗功能。

1、在實體類中添加注解校驗:

public class OrderSync {
        private static final long serialVersionUID = 1L;
        /**
         * 用戶Id
         */
        @ApiModelProperty(value = "用戶id") //@ApiModelProperty是swagger的注解,它的作用是添加和操作屬性模塊的數(shù)據(jù)
        @NotEmpty(message = "用戶id不能為空")
        private String userId;
        /**
         * 購買數(shù)量
         */
        @NotNull(message = "購買數(shù)量不能為空")
        private Integer quantity;
        /**
         * 支付時間
         */
        @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
        @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
        @NotEmpty(message = "支付時間不能為空")
        private LocalDateTime paymentTime;
    
        /**
         * 訂單狀態(tài)1、待發(fā)貨 2、待收貨 3、確認(rèn)收貨/已完成 5、已關(guān)閉
         */
        @Excel(name = "訂單狀態(tài)", readConverterExp = "1=待發(fā)貨,2=待收貨,3=確認(rèn)收貨/已完成 ,5=已關(guān)閉")
        @NotEmpty(message = "訂單狀態(tài)不能為空")
        private String orderStatus;

}

2、在接口中添加@valid注解

在controller類中添加接口,POST方法中接收設(shè)置了@Valid相關(guān)注解的實體對象,然后再參數(shù)中添加@Valid注解來開啟效驗功能,需要注意的是,@Valid對Get請求中接收的平面參數(shù)請求無效。

@RestController
public class TestController {
    @PostMapping("/sync")
    public String addUserInfo(@Valid @RequestBody OrderSync sync){
        return "調(diào)用成功";
    }
}

嵌套校驗:

為了能夠進行嵌套驗證,必須手動在Person實體的son字段上明確指出這個字段里面的實體也要進行驗證。

class Person {
    @NotNull
    private Integer id;

    @NotNull
    /**
     * @Validated不允許使用在成員屬性上,所以只能用@Valid
     * 如果不加  @Valid 就不會對 Son類進行校驗,只會判斷 @NotNull,List<Son>是否為空,并不會Son類里面的成員屬性
     */
    @Valid //嵌套驗證
    private List<Son> son;
}

class Son {
    @NotNull
    private Integer sid;

    @NotBlank(message = "姓名不能為空")
    private String name;

}

class MemberController {

    @ApiOperation(value = "會員注冊")
    @PostMapping("register")
                              //使用@Validated或者@Valid都可以,這樣就完成了嵌套驗證
    public JSONResult register(@Validated @RequestBody Person person, BindingResult bindingResult){

        if (bindingResult.hasErrors()) {
            System.out.println(bindingResult.getFieldError().getDefaultMessage());
            return JSONResult.error().message(bindingResult.getFieldError().getDefaultMessage());
        }
        return JSONResult.ok();
    }

}

3、@Valid 與 @Validated注解的區(qū)別:

@Valid、@Validated 注解可以實現(xiàn)數(shù)據(jù)的驗證,你可以定義實體,在實體的屬性上添加校驗注解,如@NotEmpty,@NotBlank,@NotNull等等的注解就是,不加上就不會生效!
@Valid 包位置:javax.validation
@Validated 包位置 org.springframework.validation.annotation,是@Valid 的一次封裝,是Spring提供的校驗機制使用。

不同點:

1、使用位置:

  • @Validated:用在類型、方法和方法參數(shù)上。但不能用于成員屬性(field)
  • @Valid:可以用在方法、構(gòu)造函數(shù)、方法參數(shù)和成員屬性(field)上
    java實體類字段json注解有哪些,業(yè)務(wù)所需,java,筆記java實體類字段json注解有哪些,業(yè)務(wù)所需,java,筆記

如果@Validated注解在成員屬性上,則會報 ‘@Validdated’ not applicable to field 錯誤:
java實體類字段json注解有哪些,業(yè)務(wù)所需,java,筆記

2、分組上:@Valid 不支持分組, @Validated則支持分組驗證。

定義分組接口:

public interface IGroupA {
}
 
public interface IGroupB {
}

定義需要檢驗的參數(shù)bean:

public class StudentBean implements Serializable{
    @NotBlank(message = "用戶名不能為空")
    private String name;
    //只在分組為IGroupB的情況下進行驗證
    @Min(value = 18, message = "年齡不能小于18歲", groups = {IGroupB.class})
    private Integer age;
    @Pattern(regexp = "^((13[0-9])|(14[5,7,9])|(15([0-3]|[5-9]))|(166)|(17[0,1,3,5,6,7,8])|(18[0-9])|(19[8|9]))\\d{8}$", message = "手機號格式錯誤")
    private String phoneNum;
    @Email(message = "郵箱格式錯誤")
    private String email;
    @MyConstraint
    private String className;
}

測試代碼:檢驗分組為IGroupA的情況,這里對分組IGroupB的就沒檢驗了

@RestController
public class CheckController {
    @PostMapping("stu")
    public String addStu(@Validated({IGroupA.class}) @RequestBody StudentBean studentBean){
        return "add student success";
    }
}

如果把測試代碼改成下面這樣,就會檢驗B了

@RestController
public class CheckController {
    @PostMapping("stu")
    public String addStu(@Validated({IGroupA.class, IGroupB.class}) @RequestBody StudentBean studentBean){
        return "add student success";
    }
}

說明:
1、不分 配groups,默認(rèn)每次都要進行驗證
2、對一個參數(shù)需要多種驗證方式時,也可通過分配不同的組達到目的。

相同點:

在檢驗Controller的入?yún)⑹欠穹弦?guī)范時,使用@Validated或者@Valid都可以實現(xiàn),并且需要傳入BindingResult對象,用于獲取校驗失敗情況下的反饋信息,如下代碼:

  @PostMapping("register")
                             //@Valid這兩個用哪個效果都一樣
    public JSONResult register(@Validated @RequestBody RegisterVo registerVo, BindingResult bindingResult){

     //會把校驗失敗情況下的反饋信息
        if (bindingResult.hasErrors()) {
            System.out.println(bindingResult.getFieldError().getDefaultMessage());
            return JSONResult.error().message(bindingResult.getFieldError().getDefaultMessage());
        }
        memberService.register(registerVo);
        return JSONResult.ok();
    }

總結(jié):

1.常用校驗注解@NotEmpty,@NotBlank,@NotNull,需要搭配@Valid或@Validated使用

2.@Valid或@Validated 中有 BindingResult,可以獲取校驗失敗情況下的反饋信息,如果不添加,默認(rèn)情況下會拋出對應(yīng)的異常。

3.@Validated無法單獨提供嵌套驗證功能。不能用在成員屬性上,能配合嵌套驗證注解@Valid進行嵌套驗證。

4.@Valid無法單獨提供嵌套驗證功能。能夠用在成員屬性上,能配合嵌套驗證注解@Valid進行嵌套驗證。

參考鏈接:https://blog.csdn.net/weixin_46015018/article/details/122637042文章來源地址http://www.zghlxwxcb.cn/news/detail-766621.html

到了這里,關(guān)于【Java】在實體類中常用的注解校驗的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • Java給實體每一個字段賦默認(rèn)值

    Java給實體每一個字段賦默認(rèn)值

    目錄 一、初級版 1、工具類 2、實體類與測試代碼 二、升級版-多層嵌套 1、工具類 2、實體類與測試代碼 三、最終版-各種集合 1、工具類 2、實體類與測試代碼 1、工具類 ????????使用反射機制實現(xiàn)任意實體類字段的默認(rèn)值賦值功能 2、實體類與測試代碼 ????????使用

    2024年02月15日
    瀏覽(18)
  • 【Java】給實體每一個字段賦默認(rèn)值

    【Java】給實體每一個字段賦默認(rèn)值

    目錄 一、初級版 1、工具類 2、實體類與測試代碼 二、升級版-多層嵌套 1、工具類 2、實體類與測試代碼 三、最終版-各種集合 1、工具類 2、實體類與測試代碼 1、工具類 ????????使用反射機制實現(xiàn)任意實體類字段的默認(rèn)值賦值功能 2、實體類與測試代碼 ????????使用

    2024年02月07日
    瀏覽(15)
  • String類中的一些常用方法(JAVA)

    String類中的一些常用方法(JAVA)

    目錄 字符串比較方法: boolean equals(Object anObject): ?int compareTo(String s): int compareToIgnoreCase(String str) 字符串查找方法: char charAt(int index): int indexOf(int ch): ?int indexOf(int ch, int fromIndex): int indexOf(String str): int indexOf(String str, int fromIndex): int lastIndexOf(int ch): int lastIndexOf(in

    2024年02月07日
    瀏覽(19)
  • Java 4種校驗注解(值校驗、范圍校驗、長度校驗、格式校驗)

    1 值校驗 1.1 @NotNull注解 被注解的元素必須不為空,一般 用于數(shù)值類型的參數(shù)校驗 @NotNull(message = \\\"用戶編號不能為空\\\") private Integer userId; 1.2 @NotBlank注解 驗證注解的元素值不為空(不為null、去除首位空格后長度為0),并且類型為String。 @NotBlank(message = \\\"用戶名稱不能為空\\\") pr

    2024年02月16日
    瀏覽(22)
  • Java實體和JSON之間的相互轉(zhuǎn)換

    Java實體和JSON之間的相互轉(zhuǎn)換

    代碼如下: 初始化并輸出一下: 注意,如果沒有使用“@Data”注解,一定要加上get和set方法,不然轉(zhuǎn)化之后的Json是空的! 主要是對SerializerFeature枚舉類的使用,詳細的可以看這個博客: https://blog.csdn.net/xiang__liu/article/details/81570923 或者看這里: https://www.javadoc.io/static/com.ali

    2024年02月12日
    瀏覽(30)
  • java 自定義xss校驗注解實現(xiàn)

    java 自定義xss校驗注解實現(xiàn)

    自定義一個注解@Xss。名字隨意 validator校驗類:XssValidator。這個校驗類要和上面的@Xss注解上的 @Constraint(validatedBy = { XssValidator.class })對應(yīng) 具體使用在某個字段上加上注解;形如: 然后在控制層中增加@Validated注解校驗就可以了 ?以上代碼實現(xiàn)后。會自動針對某些增加了@Xss字符

    2024年02月14日
    瀏覽(22)
  • java如何利用框架實現(xiàn)實體變?yōu)閖son格式

    Java中可以通過多種框架實現(xiàn)將實體類轉(zhuǎn)換為JSON格式的字符串,常用的有以下幾種: Jackson:Jackson是一個功能強大的JSON框架,可以將Java對象轉(zhuǎn)換為JSON格式的字符串,也可以將JSON格式的字符串轉(zhuǎn)換為Java對象。 使用Jackson將Java對象轉(zhuǎn)換為JSON字符串,可以使用以下代碼: 其中,

    2024年02月06日
    瀏覽(24)
  • 從 JSON 轉(zhuǎn) Java 實體的多種方法詳解

    將 JSON 數(shù)據(jù)轉(zhuǎn)換為 Java 對象是現(xiàn)代應(yīng)用程序開發(fā)中常見的任務(wù)。在 Java 中,有多種方法可以實現(xiàn)這一目標(biāo)。本文將詳細介紹幾種常見的方法,以及它們的優(yōu)缺點。 1. 手動映射(Manual Mapping) 手動映射是最基礎(chǔ)的方法之一,通過使用原生的 Java 核心庫或第三方庫手動將 JSON 字段

    2024年02月05日
    瀏覽(18)
  • 【Java】HttpServlet類中前后端交互三種方式(query string、form表單、JSON字符串)

    【Java】HttpServlet類中前后端交互三種方式(query string、form表單、JSON字符串)

    在前后端的交互中,前端通過以下三種方式來與后端進行交互?? ?query string ?form表單 ?JSON字符串 下面我們將書寫這三種方式的后端代碼并進行講解 QueryString即在url中寫入鍵值對,一般用doGet方法進行交互 代碼如下? 用postman驗證 ? ?form表單一般用doPost方法進行交互 Jason是

    2024年01月19日
    瀏覽(23)
  • Springboot-- 注解字段校驗,并統(tǒng)一設(shè)置返回值

    Springboot-- 注解字段校驗,并統(tǒng)一設(shè)置返回值

    引包: import org.springframework.validation.annotation.Validated; 規(guī)則 @AssertFalse Boolean,boolean 驗證注解的元素值是false @AssertTrue Boolean,boolean 驗證注解的元素值是true @NotNull 任意類型 驗證注解的元素值不是null @Null 任意類型 驗證注解的元素值是null @Min(value=值) BigDecimal,BigInteger, byte,short,

    2024年02月11日
    瀏覽(33)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包