软件编程
位置:首页>> 软件编程>> java编程>> springboot 参数格式校验操作

springboot 参数格式校验操作

作者:taiguolaotu  发布时间:2023-10-16 08:53:32 

标签:springboot,参数,校验

springboot 参数格式校验

@Validated

字面意思校验

springboot 参数格式校验操作

@RequestBody

该注解不用多说,意思是接收为json格式的参数

@Validated

字面意思校验, 需要配合@NotBlank 或者 @NotNull 注解才能生效

进入到请求体参数中。

springboot 参数格式校验操作

springboot 参数注解校验

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 = "手机号不能为空")
       @Pattern(regexp = "^(((13[0-9])|(14[579])|(15([0-3]|[5-9]))|(16[6])|(17[0135678])|(18[0-9])|(19[89]))\\d{8})$", message = "手机号格式错误")
       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 = "手机验证",description = "手机验证")
public class MobileController {
@ApiOperation("手机验证")
@RequestMapping("/phone")
   public String mobilePattern( Phone phone){
       return "chengg";
   }
   @PostMapping("/getUser")
   @ApiOperation("手机验证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("手机验证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 = "测试", notes = "")
   public String  test(@ApiParam(name = "test", value = "参数", required = true) @Validated @RequestBody User test, BindingResult bindingResult) {
       validData(bindingResult);
       if(bindingResult.hasErrors()){
           String errorMsg = bindingResult.getFieldError().getDefaultMessage();
           return errorMsg;
       }
       return "参数验证通过";
   }
}

3.自定义一个抛出异常类


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;

/**
* 自定义验证抛出异常
*/
@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) {
               //打印验证不通过的信息
               System.out.println(item.getMessage());
           }
       }
       return exception.getMessage();
   }
}

4.加一个当检测第一个参数不合法时立即返回错误不会继续进行校验


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;
   }
}

来源:https://blog.csdn.net/taiguolaotu/article/details/118336396

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com