欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

springboot 參數(shù)格式校驗(yàn)操作

 更新時(shí)間:2021年07月02日 10:28:40   作者:taiguolaotu  
這篇文章主要介紹了springboot 參數(shù)格式校驗(yàn)操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

springboot 參數(shù)格式校驗(yàn)

@Validated

字面意思校驗(yàn)

在這里插入圖片描述

@RequestBody

該注解不用多說(shuō),意思是接收為json格式的參數(shù)

@Validated

字面意思校驗(yàn), 需要配合@NotBlank 或者 @NotNull 注解才能生效

進(jìn)入到請(qǐng)求體參數(shù)中。

在這里插入圖片描述

springboot 參數(shù)注解校驗(yàn)

1.添加依賴

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-validation</artifactId>
        </dependency>
package com.xl.annotation;
import lombok.Data;
import org.hibernate.validator.constraints.Length;
import org.hibernate.validator.constraints.Range;
import javax.validation.constraints.*;
import java.math.BigDecimal;
import java.util.Date;
@Data
public class User {

        @NotNull(message = "ID不能為空")
        @Range(min = 1, max = 100, message = "ID必須在1到100之間")
        private Integer id;

        @NotNull(message = "姓名不能為空")
        @Length(min = 2, max = 6, message = "姓名必須在2到6位之間")
        private String name;

        @NotNull(message = "余額不能為空")
        @DecimalMax(value = "30.50", message = "余額不能超過30.5")
        @DecimalMin(value = "1.50", message = "余額不能低于1.5")
        private BigDecimal amount;

        @NotNull(message = "生日不能為空")
        @Past(message = "生日必須是過去")
        private Date birthday;

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

        @NotBlank(message = "手機(jī)號(hào)不能為空")
        @Pattern(regexp = "^(((13[0-9])|(14[579])|(15([0-3]|[5-9]))|(16[6])|(17[0135678])|(18[0-9])|(19[89]))\\d{8})$", message = "手機(jī)號(hào)格式錯(cuò)誤")
        private String phone;
}

2.controller層

package com.xl.annotation;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.validation.BindingResult;
import org.springframework.validation.ObjectError;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.validation.ValidationException;
import javax.validation.constraints.Max;
import javax.validation.constraints.NotNull;

@RestController
@Validated
@Api(value = "手機(jī)驗(yàn)證",description = "手機(jī)驗(yàn)證")
public class MobileController {
@ApiOperation("手機(jī)驗(yàn)證")
@RequestMapping("/phone")
    public String mobilePattern( Phone phone){
        return "chengg";
    }
    @PostMapping("/getUser")
    @ApiOperation("手機(jī)驗(yàn)證12")
    public String getUserStr( @NotNull(message = "name 不能為空")@RequestParam String name,
                              @Max(value = 99, message = "不能大于99歲")@RequestParam Integer age) {
        return "name: " + name + " ,age:" + age;
    }
   /* @PostMapping("/getUser1")
    @ApiOperation("手機(jī)驗(yàn)證c")
    public String getUser(@RequestBody @Validated User user, BindingResult bindingResult) {
        validData(bindingResult);
        return "name: " + user.getName() + " ,age:" + user.getAge();
    }*/
    private void validData(BindingResult bindingResult) {
        if (bindingResult.hasErrors()) {
            StringBuffer sb = new StringBuffer();
            for (ObjectError error : bindingResult.getAllErrors()) {
                sb.append(error.getDefaultMessage());
            }
            throw new ValidationException(sb.toString());
        }
    }

    @PostMapping("/test")
    @ApiOperation(value = "測(cè)試", notes = "")
    public String  test(@ApiParam(name = "test", value = "參數(shù)", required = true) @Validated @RequestBody User test, BindingResult bindingResult) {
        validData(bindingResult);
        if(bindingResult.hasErrors()){
            String errorMsg = bindingResult.getFieldError().getDefaultMessage();
            return errorMsg;
        }
        return "參數(shù)驗(yàn)證通過";
    }
}

3.自定義一個(gè)拋出異常類

package com.xl.annotation;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import javax.validation.ConstraintViolation;
import javax.validation.ConstraintViolationException;
import javax.validation.ValidationException;
import java.util.Set;

/**
 * 自定義驗(yàn)證拋出異常
 */
@RestControllerAdvice
public class GlobalExceptionHandler {
    @ExceptionHandler(ValidationException.class)
    @ResponseStatus(HttpStatus.BAD_REQUEST)
    public String handle(ValidationException exception) {
        if(exception instanceof ConstraintViolationException){
            ConstraintViolationException exs = (ConstraintViolationException) exception;

            Set<ConstraintViolation<?>> violations = exs.getConstraintViolations();
            for (ConstraintViolation<?> item : violations) {
                //打印驗(yàn)證不通過的信息
                System.out.println(item.getMessage());
            }
        }
        return exception.getMessage();
    }
}

4.加一個(gè)當(dāng)檢測(cè)第一個(gè)參數(shù)不合法時(shí)立即返回錯(cuò)誤不會(huì)繼續(xù)進(jìn)行校驗(yàn)

package com.xl.annotation;
import org.hibernate.validator.HibernateValidator;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import javax.validation.Validation;
import javax.validation.Validator;
import javax.validation.ValidatorFactory;

@Configuration
public class ValidatorConf {
    @Bean
    public Validator validator() {
        ValidatorFactory validatorFactory = Validation.byProvider( HibernateValidator.class )
                .configure()
                .failFast( true )
                .buildValidatorFactory();
        Validator validator = validatorFactory.getValidator();
        return validator;
    }
}

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • java8?stream排序以及自定義比較器方式

    java8?stream排序以及自定義比較器方式

    這篇文章主要介紹了java8?stream排序以及自定義比較器方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • Java 17 更快的 LTS 節(jié)奏

    Java 17 更快的 LTS 節(jié)奏

    這篇文章主要介紹的是Java 17 更新后的LTS,現(xiàn)在 Java 17 的發(fā)布,讓 Java 11 成了 LTS 系列的次新版本,下面我們就來(lái)看看Java 17 的更新 LTS有什么變化吧
    2021-09-09
  • 簡(jiǎn)單實(shí)現(xiàn)Servlet文件下載功能

    簡(jiǎn)單實(shí)現(xiàn)Servlet文件下載功能

    這篇文章主要教大家如何簡(jiǎn)單實(shí)現(xiàn)Servlet文件下載功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-09-09
  • Java實(shí)現(xiàn)的基于socket通信的實(shí)例代碼

    Java實(shí)現(xiàn)的基于socket通信的實(shí)例代碼

    Java實(shí)現(xiàn)的基于socket通信的實(shí)例代碼,需要的朋友可以參考一下
    2013-03-03
  • 一文帶你探索Java中的通配符與泛型

    一文帶你探索Java中的通配符與泛型

    Java 語(yǔ)言中的泛型是一種強(qiáng)大的特性,它可以將類型參數(shù)化,使得代碼更具通用性和安全性,本文將深入講解 Java 通配符和泛型,有需要的小伙伴可以了解下
    2023-12-12
  • SpringBoot基于Disruptor實(shí)現(xiàn)高效的消息隊(duì)列?

    SpringBoot基于Disruptor實(shí)現(xiàn)高效的消息隊(duì)列?

    Disruptor是一個(gè)開源的Java框架,它被設(shè)計(jì)用于在生產(chǎn)者-消費(fèi)者問題上獲得盡量高的吞吐量和盡量低的延遲,本文主要介紹了SpringBoot基于Disruptor實(shí)現(xiàn)高效的消息隊(duì)列?,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-02-02
  • SpringBoot使用Redis對(duì)用戶IP進(jìn)行接口限流的項(xiàng)目實(shí)踐

    SpringBoot使用Redis對(duì)用戶IP進(jìn)行接口限流的項(xiàng)目實(shí)踐

    本文主要介紹了SpringBoot使用Redis對(duì)用戶IP進(jìn)行接口限流,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • Java Executor 框架的實(shí)例詳解

    Java Executor 框架的實(shí)例詳解

    這篇文章主要介紹了Java Executor 框架的實(shí)例詳解的相關(guān)資料,這里提供實(shí)例來(lái)幫助大家學(xué)習(xí)理解這部分內(nèi)容,需要的朋友可以參考下
    2017-09-09
  • java中struts配置

    java中struts配置

    本文給大家詳細(xì)分析了在java項(xiàng)目中配置Struts的方法和示例,十分的簡(jiǎn)單實(shí)用,有需要的小伙伴可以參考下。
    2015-06-06
  • Value注解支持對(duì)象類型ConfigurationProperties功能

    Value注解支持對(duì)象類型ConfigurationProperties功能

    這篇文章主要為大家介紹了Value注解支持對(duì)象類型ConfigurationProperties功能詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-10-10

最新評(píng)論