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

如何實(shí)現(xiàn) Java SpringBoot 自動(dòng)驗(yàn)證入?yún)?shù)據(jù)的有效性

這篇具有很好參考價(jià)值的文章主要介紹了如何實(shí)現(xiàn) Java SpringBoot 自動(dòng)驗(yàn)證入?yún)?shù)據(jù)的有效性。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

Java SpringBoot 通過javax.validation.constraints下的注解,實(shí)現(xiàn)入?yún)?shù)據(jù)自動(dòng)驗(yàn)證
如果碰到 @NotEmpty 否則不生效,注意看下 @RequestBody 前面是否加上了@Valid

Validation常用注解匯總

Constraint 詳細(xì)信息
@Null 被注釋的元素必須為 null
@NotNull 被注釋的元素必須不為 null
@NotBlank 被注釋的元素不能為空(空格視為空)
@NotEmpty 被注釋的元素不能為空 (允許有空格)
@Size(max, min) 被注釋的元素的大小必須在指定的范圍內(nèi)
@Min(value) 被注釋的元素必須是一個(gè)數(shù)字,其值必須大于等于指定的最小值
@Max(value) 被注釋的元素必須是一個(gè)數(shù)字,其值必須小于等于指定的最大值
@Pattern(value) 被注釋的元素必須符合指定的正則表達(dá)式
@DecimalMin(value) 被注釋的元素必須是一個(gè)數(shù)字,其值必須大于等于指定的最小值
@DecimalMax(value) 被注釋的元素必須是一個(gè)數(shù)字,其值必須小于等于指定的最大值
@AssertTrue 被注釋的元素必須為 true
@AssertFalse 被注釋的元素必須為 false
@Digits (integer, fraction) 被注釋的元素必須是一個(gè)數(shù)字,其值必須在可接受的范圍內(nèi)
@Past 被注釋的元素必須是一個(gè)過去的日期
@Future 被注釋的元素必須是一個(gè)將來的日期

示例

 /**
   * 用戶名
   */
  @NotBlank(message = "用戶名不能為空")
  private String username;
  /**
   * 用戶真實(shí)姓名
   */
  @NotBlank(message = "用戶真實(shí)姓名不能為空")
  private String name;

  /**
   * 密碼
   */
  @Pattern(regexp = "^(?:(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*[^A-Za-z0-9]))(?=^[^\\u4e00-\\u9fa5]{0,}$).{8,20}$", message = "密碼過于簡(jiǎn)單有被盜風(fēng)險(xiǎn),請(qǐng)保證密碼大于8位,并且由大小寫字母、數(shù)字,特殊符號(hào)組成")  
  private String password;

  /**
   * 郵箱
   */
  @NotBlank(message = "郵箱不能為空")
  @Email(message = "郵箱格式不正確")
  private String email;

  /**
   * 手機(jī)號(hào)
   */
  @NotBlank(message = "手機(jī)號(hào)不能為空")
  @Pattern(regexp = "^(1[0-9])\\d{9}$", message = "手機(jī)號(hào)格式不正確")
  private String mobile;

Demo

入?yún)?duì)象上,添加注解及說明

package com.vipsoft.web.entity;

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Size;
import java.io.Serializable;

/**
 * 定時(shí)任務(wù)調(diào)度
 */
public class QuartzJob implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * 任務(wù)序號(hào)
     */
    private long jobId;

    /**
     * 任務(wù)名稱
     */
    @NotBlank(message = "任務(wù)名稱不能為空")
    @Size(max = 10, message = "任務(wù)名稱不能超過10個(gè)字符")
    private String jobName;

    /**
     * 任務(wù)組名
     */
    @NotBlank(message = "任務(wù)組名不能為空")
    @Size(max = 10, message = "任務(wù)組名不能超過10個(gè)字符")
    private String jobGroup;

    /**
     * 調(diào)用目標(biāo)字符串
     */
    private String invokeTarget;

    /**
     * 執(zhí)行表達(dá)式
     */
    private String cronExpression;

    /**
     * cron計(jì)劃策略 0=默認(rèn),1=立即觸發(fā)執(zhí)行,2=觸發(fā)一次執(zhí)行,3=不觸發(fā)立即執(zhí)行
     */
    private String misfirePolicy = "0";

    /**
     * 并發(fā)執(zhí)行 0=允許,1=禁止
     */
    private String concurrent;

    /**
     * 任務(wù)狀態(tài)(0正常 1暫停)
     */
    private String status;

    /**
     * 備注
     */
    private String remark;
}

Controller @RequestBody 前面必須加上 @Valid 否則不生效

import javax.validation.Valid;

@RestController
@RequestMapping("schedule")
public class ScheduleController {

    private Logger logger = LoggerFactory.getLogger(ScheduleController.class);
  
    @RequestMapping("/add")
    public ApiResult addTask(@Valid @RequestBody QuartzJob param) throws Exception {
        logger.info("添加調(diào)度任務(wù) => {} ", JSONUtil.toJsonStr(param));
        
        return new ApiResult("添加成功");
    }
}

異常處理,統(tǒng)一返回對(duì)象,方便前端解析
GlobalExceptionHandler

package com.vipsoft.web.exception;

import cn.hutool.core.util.StrUtil;
import com.vipsoft.web.utils.ApiResult;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.validation.BindException;
import org.springframework.validation.BindingResult;
import org.springframework.validation.FieldError;
import org.springframework.validation.ObjectError;
import org.springframework.web.HttpRequestMethodNotSupportedException;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

import java.util.List;

/**
 * 全局異常處理器
 */
@RestControllerAdvice
public class GlobalExceptionHandler {

    private static final Logger logger = LoggerFactory.getLogger(GlobalExceptionHandler.class);
 
    /**
     * 處理自定義異常
     */
    @ExceptionHandler(CustomException.class)
    public ApiResult handleException(CustomException e) {
        // 打印異常信息
        logger.error("### 異常信息:{} ###", e.getMessage());
        return new ApiResult(e.getCode(), e.getMessage());
    }

    /**
     * 參數(shù)錯(cuò)誤異常
     */
    @ExceptionHandler({MethodArgumentNotValidException.class, BindException.class})
    public ApiResult handleException(Exception e) {
        if (e instanceof MethodArgumentNotValidException) {
            MethodArgumentNotValidException validException = (MethodArgumentNotValidException) e;
            BindingResult result = validException.getBindingResult();
            StringBuffer errorMsg = new StringBuffer();
            if (result.hasErrors()) {
                List<ObjectError> errors = result.getAllErrors();
                errors.forEach(p -> {
                    FieldError fieldError = (FieldError) p;
                    errorMsg.append(fieldError.getDefaultMessage()).append(",");
                    logger.error("### 請(qǐng)求參數(shù)錯(cuò)誤:{" + fieldError.getObjectName() + "},field{" + fieldError.getField() + "},errorMessage{" + fieldError.getDefaultMessage() + "}");
                });
                return new ApiResult(6001, errorMsg.toString());
            }
        } else if (e instanceof BindException) {
            BindException bindException = (BindException) e;
            if (bindException.hasErrors()) {
                logger.error("### 請(qǐng)求參數(shù)錯(cuò)誤: {}", bindException.getAllErrors());
            }
        }
        return new ApiResult(6001, "參數(shù)無效");
    }

    /**
     * 處理HttpRequestMethodNotSupporte異常
     * @param e
     * @return
     */
    @ExceptionHandler(HttpRequestMethodNotSupportedException.class)
    public Object methodHandler(HttpRequestMethodNotSupportedException e) {
        // 打印異常信息
        logger.error("### 異常信息:{} ###", e.getMessage());
        return new ApiResult(6000, e.getMessage());
    }

    /**
     * 處理所有不可知的異常
     */
    @ExceptionHandler(Exception.class)
    public ApiResult handleOtherException(Exception e) {
        // 打印異常信息
        logger.error("### 系統(tǒng)內(nèi)部錯(cuò)誤:{} ###", e.getMessage(), e);
        String warnMsg = StrUtil.isEmpty(e.getMessage()) ? "### 系統(tǒng)內(nèi)部錯(cuò)誤 ###" : e.getMessage();
        return new ApiResult(6000, "系統(tǒng)內(nèi)部錯(cuò)誤", e.getMessage());
    }

}

統(tǒng)一返回對(duì)像 ApiResult

package com.vipsoft.web.utils;


//import com.github.pagehelper.PageInfo;

import java.io.Serializable;

public class ApiResult implements Serializable {

    /**
     * 返回編碼 0:失敗、1:成功
     */
    private int code;

    /**
     * 返回消息
     */
    private String message;

    /**
     * 返回對(duì)象
     */
    private Object data;

    /**
     * 分頁對(duì)象
     */
    private Page page;

    public ApiResult() {
        this.code = 1;
        this.message = "請(qǐng)求成功";
    }

    public ApiResult(Integer code, String message) {
        this.code = code;
        this.message = message;
    }

    public ApiResult(Integer code, String message, Object data) {
        this.code = code;
        this.message = message;
        this.setData(data);
    }

    public ApiResult(Object data) {
        this.code = 1;
        this.message = "請(qǐng)求成功";
        this.setData(data);
    }

//    public ApiResult(PageInfo pageInfo) {
//        this.code = 1;
//        this.message = "請(qǐng)求成功";
//        this.setData(pageInfo.getList());
//        this.setPage(convertToPage(pageInfo));
//    }
//
//    public Page convertToPage(PageInfo pageInfo) {
//        Page result = new Page();
//        result.setTotalCount(pageInfo.getTotal());
//        result.setPageNum(pageInfo.getPageNum());
//        result.setPageCount(pageInfo.getPages());
//        result.setPageSize(pageInfo.getPageSize());
//        result.setPrePage(pageInfo.getPrePage());
//        result.setNextPage(pageInfo.getNextPage());
//        return result;
//    }

    public int getCode() {
        return code;
    }

    public void setCode(int code) {
        this.code = code;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public Object getData() {
        return data;
    }

    public void setData(Object data) {
        this.data = data;
    }

    public Page getPage() {
        return page;
    }

    public void setPage(Page page) {
        this.page = page;
    }
}

運(yùn)行結(jié)果如下
如何實(shí)現(xiàn) Java SpringBoot 自動(dòng)驗(yàn)證入?yún)?shù)據(jù)的有效性文章來源地址http://www.zghlxwxcb.cn/news/detail-412289.html

到了這里,關(guān)于如何實(shí)現(xiàn) Java SpringBoot 自動(dòng)驗(yàn)證入?yún)?shù)據(jù)的有效性的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • 騰訊云短信服務(wù)實(shí)現(xiàn) Java 發(fā)送手機(jī)驗(yàn)證碼(SpringBoot+Redis 實(shí)現(xiàn))

    騰訊云短信服務(wù)實(shí)現(xiàn) Java 發(fā)送手機(jī)驗(yàn)證碼(SpringBoot+Redis 實(shí)現(xiàn))

    前置:需要騰訊云的賬號(hào),后期授權(quán)需要,不需要買云服務(wù)器,有需要的可以購買短信套餐(幾塊錢) 搜索框輸入短信,可以買一個(gè)短信套餐包,便宜不貴,進(jìn)入短信服務(wù)的控制臺(tái) 發(fā)送短信有頻率限制,企業(yè)用戶可以修改設(shè)置 之后我們需要對(duì)短信內(nèi)容進(jìn)行設(shè)置 ?? ??類型有網(wǎng)站

    2024年02月09日
    瀏覽(25)
  • (短信服務(wù))java SpringBoot 阿里云短信功能實(shí)現(xiàn)發(fā)送手機(jī)驗(yàn)證碼

    (短信服務(wù))java SpringBoot 阿里云短信功能實(shí)現(xiàn)發(fā)送手機(jī)驗(yàn)證碼

    阿里云官網(wǎng):?https://www.aliyun.com/ 點(diǎn)擊官網(wǎng)首頁注冊(cè)按鈕。 注冊(cè)成功后,點(diǎn)擊登錄按鈕進(jìn)行登錄。登錄后進(jìn)入短信服務(wù)管理頁面,選擇國內(nèi)消息菜單: 短信簽名是短信發(fā)送者的署名,表示發(fā)送方的身份。 切換到【模板管理】標(biāo)簽頁: 短信模板包含短信發(fā)送內(nèi)容、場(chǎng)景、變量信息

    2024年02月02日
    瀏覽(33)
  • 前后端分離java開發(fā)圖形驗(yàn)證碼+谷歌開源Kaptcha使用(Springboot+redis實(shí)現(xiàn)圖形驗(yàn)證碼校驗(yàn))

    前后端分離java開發(fā)圖形驗(yàn)證碼+谷歌開源Kaptcha使用(Springboot+redis實(shí)現(xiàn)圖形驗(yàn)證碼校驗(yàn))

    注冊(cè) - 登錄 - 修改密碼 一般需要發(fā)送驗(yàn)證碼,但是容易被攻擊惡意調(diào)用。 手機(jī)短信轟炸機(jī)是批量、循環(huán)給手機(jī)無限發(fā)送各種網(wǎng)站的注冊(cè)驗(yàn)證碼短信的方法。 短信一條5分錢,如果被大盜刷大家自己計(jì)算郵箱通知不用錢,但被大盜刷,帶寬、連接等都被占用,導(dǎo)致無法正常使用

    2024年01月19日
    瀏覽(22)
  • 【Spring】SpringBoot的10個(gè)參數(shù)驗(yàn)證技巧

    【Spring】SpringBoot的10個(gè)參數(shù)驗(yàn)證技巧

    參數(shù)驗(yàn)證很重要,是平時(shí)開發(fā)環(huán)節(jié)中不可少的一部分,但是我想很多后端同事會(huì)偷懶,干脆不錯(cuò),這樣很可能給系統(tǒng)的穩(wěn)定性和安全性帶來嚴(yán)重的危害。那么在Spring Boot應(yīng)用中如何做好參數(shù)校驗(yàn)工作呢,本文提供了10個(gè)小技巧,你知道幾個(gè)呢? Spring Boot提供了內(nèi)置的驗(yàn)證注解,

    2024年02月10日
    瀏覽(20)
  • Java21 + SpringBoot3集成easy-captcha實(shí)現(xiàn)驗(yàn)證碼顯示和登錄校驗(yàn)

    Java21 + SpringBoot3集成easy-captcha實(shí)現(xiàn)驗(yàn)證碼顯示和登錄校驗(yàn)

    近日心血來潮想做一個(gè)開源項(xiàng)目,目標(biāo)是做一款可以適配多端、功能完備的模板工程,包含后臺(tái)管理系統(tǒng)和前臺(tái)系統(tǒng),開發(fā)者基于此項(xiàng)目進(jìn)行裁剪和擴(kuò)展來完成自己的功能開發(fā)。 本項(xiàng)目為前后端分離開發(fā),后端基于 Java21 和 SpringBoot3 開發(fā),后端使用 Spring Security 、 JWT 、 Spr

    2024年01月23日
    瀏覽(18)
  • apollo自動(dòng)駕駛進(jìn)階學(xué)習(xí)之:如何實(shí)現(xiàn)慢速車?yán)@行超車及其參數(shù)調(diào)試

    apollo自動(dòng)駕駛進(jìn)階學(xué)習(xí)之:如何實(shí)現(xiàn)慢速車?yán)@行超車及其參數(shù)調(diào)試

    首先需要理解Planning模塊是基于Scenario、Stage、Task這樣的層次來進(jìn)行的,即:場(chǎng)景-步驟-具體的決策方法。Apollo可以應(yīng)對(duì)自動(dòng)駕駛所面臨的不同道路場(chǎng)景,都是通過Scenario統(tǒng)一注冊(cè)與管理。Scenario通過一個(gè)有限狀態(tài)機(jī)來判斷選擇當(dāng)前行車場(chǎng)景,每個(gè)Scenario下又有多個(gè)Stage,指當(dāng)前

    2024年02月11日
    瀏覽(75)
  • apollo自動(dòng)駕駛進(jìn)階學(xué)習(xí)之:如何實(shí)現(xiàn)施工路段限速繞行及其參數(shù)調(diào)試

    首先需要理解Planning模塊是基于Scenario、Stage、Task這樣的層次來進(jìn)行的,即:場(chǎng)景-步驟-具體的決策方法。Apollo可以應(yīng)對(duì)自動(dòng)駕駛所面臨的不同道路場(chǎng)景,都是通過Scenario統(tǒng)一注冊(cè)與管理。Scenario通過一個(gè)有限狀態(tài)機(jī)來判斷選擇當(dāng)前行車場(chǎng)景,每個(gè)Scenario下又有多個(gè)Stage,指當(dāng)前

    2024年02月13日
    瀏覽(14)
  • Java 設(shè)置Excel數(shù)據(jù)有效性

    1、整體思路 ? ? ? ? (1)、先定義有效性對(duì)象。 ? ? ? ? (2)、將有效性對(duì)象添加到對(duì)應(yīng)的sheet。 2、舉例 ? ? ? ? (1)設(shè)置時(shí)間有效性,如允許輸入的值為2021/7/1 到 2021/7/31。 2、將定義好的有效性對(duì)象添加到對(duì)應(yīng)的sheet 注意:光設(shè)置有效性Excel輸入一個(gè)合法值還是會(huì)報(bào)錯(cuò)

    2023年04月09日
    瀏覽(18)
  • 網(wǎng)絡(luò):如何使用curl命令測(cè)試HTTP代理的有效性

    網(wǎng)絡(luò):如何使用curl命令測(cè)試HTTP代理的有效性

    在我們的日常工作中,代理服務(wù)器扮演著重要的角色,它幫助我們?cè)L問局部網(wǎng)絡(luò)無法直接訪問的資源。然而,代理的設(shè)置和驗(yàn)證有時(shí)候會(huì)比較復(fù)雜。幸運(yùn)的是,作為一名開發(fā)者應(yīng)該熟悉curl,一個(gè)強(qiáng)大的工具來測(cè)試和驗(yàn)證代理服務(wù)器的設(shè)置。本文將引導(dǎo)我們?nèi)绾问褂胏url命令測(cè)

    2024年04月22日
    瀏覽(29)
  • Java 操作 Excel:生成數(shù)據(jù)、設(shè)置單元格樣式、設(shè)置數(shù)據(jù)有效性(hutool)

    Java 操作 Excel:生成數(shù)據(jù)、設(shè)置單元格樣式、設(shè)置數(shù)據(jù)有效性(hutool)

    該篇文章,主要通過 Java 代碼對(duì) Excel 文件的常用操作,包括:生成表格、修改單元格樣式、設(shè)置數(shù)據(jù)有效性。 該篇文章,在官網(wǎng)文獻(xiàn)下增加個(gè)人的看法和理解,如文中有出現(xiàn)不符、錯(cuò)誤或需要補(bǔ)充的地方,歡迎指正,非常感謝。 該篇文章操作 Excel 使用了 hutool 的工具包以及

    2024年02月04日
    瀏覽(17)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包