springboot参数格式怎么校验
springboot参数格式怎么校验
这篇文章主要介绍“springboot参数格式怎么校验”,在日常操作中,相信很多人在springboot参数格式怎么校验问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”springboot参数格式怎么校验”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
springboot 参数格式校验
@Validated
字面意思校验
@RequestBody
该注解不用多说,意思是接收为json格式的参数
@Validated
字面意思校验, 需要配合@NotBlank 或者 @NotNull 注解才能生效
进入到请求体参数中。
springboot 参数注解校验
1.添加依赖
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId></dependency>
packagecom.xl.annotation;importlombok.Data;importorg.hibernate.validator.constraints.Length;importorg.hibernate.validator.constraints.Range;importjavax.validation.constraints.*;importjava.math.BigDecimal;importjava.util.Date;@DatapublicclassUser{@NotNull(message="ID不能为空")@Range(min=1,max=100,message="ID必须在1到100之间")privateIntegerid;@NotNull(message="姓名不能为空")@Length(min=2,max=6,message="姓名必须在2到6位之间")privateStringname;@NotNull(message="余额不能为空")@DecimalMax(value="30.50",message="余额不能超过30.5")@DecimalMin(value="1.50",message="余额不能低于1.5")privateBigDecimalamount;@NotNull(message="生日不能为空")@Past(message="生日必须是过去")privateDatebirthday;@NotBlank(message="邮箱不能为空")@Email(message="邮箱格式不正确")privateStringemail;@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="手机号格式错误")privateStringphone;}
2.controller层
packagecom.xl.annotation;importio.swagger.annotations.Api;importio.swagger.annotations.ApiOperation;importio.swagger.annotations.ApiParam;importorg.springframework.validation.BindingResult;importorg.springframework.validation.ObjectError;importorg.springframework.validation.annotation.Validated;importorg.springframework.web.bind.annotation.*;importjavax.validation.ValidationException;importjavax.validation.constraints.Max;importjavax.validation.constraints.NotNull;@RestController@Validated@Api(value="手机验证",description="手机验证")publicclassMobileController{@ApiOperation("手机验证")@RequestMapping("/phone")publicStringmobilePattern(Phonephone){return"chengg";}@PostMapping("/getUser")@ApiOperation("手机验证12")publicStringgetUserStr(@NotNull(message="name不能为空")@RequestParamStringname,@Max(value=99,message="不能大于99岁")@RequestParamIntegerage){return"name:"+name+",age:"+age;}/*@PostMapping("/getUser1")@ApiOperation("手机验证c")publicStringgetUser(@RequestBody@ValidatedUseruser,BindingResultbindingResult){validData(bindingResult);return"name:"+user.getName()+",age:"+user.getAge();}*/privatevoidvalidData(BindingResultbindingResult){if(bindingResult.hasErrors()){StringBuffersb=newStringBuffer();for(ObjectErrorerror:bindingResult.getAllErrors()){sb.append(error.getDefaultMessage());}thrownewValidationException(sb.toString());}}@PostMapping("/test")@ApiOperation(value="测试",notes="")publicStringtest(@ApiParam(name="test",value="参数",required=true)@Validated@RequestBodyUsertest,BindingResultbindingResult){validData(bindingResult);if(bindingResult.hasErrors()){StringerrorMsg=bindingResult.getFieldError().getDefaultMessage();returnerrorMsg;}return"参数验证通过";}}
3.自定义一个抛出异常类
packagecom.xl.annotation;importorg.springframework.http.HttpStatus;importorg.springframework.web.bind.annotation.ExceptionHandler;importorg.springframework.web.bind.annotation.ResponseStatus;importorg.springframework.web.bind.annotation.RestControllerAdvice;importjavax.validation.ConstraintViolation;importjavax.validation.ConstraintViolationException;importjavax.validation.ValidationException;importjava.util.Set;/***自定义验证抛出异常*/@RestControllerAdvicepublicclassGlobalExceptionHandler{@ExceptionHandler(ValidationException.class)@ResponseStatus(HttpStatus.BAD_REQUEST)publicStringhandle(ValidationExceptionexception){if(exceptioninstanceofConstraintViolationException){ConstraintViolationExceptionexs=(ConstraintViolationException)exception;Set<ConstraintViolation<?>>violations=exs.getConstraintViolations();for(ConstraintViolation<?>item:violations){//打印验证不通过的信息System.out.println(item.getMessage());}}returnexception.getMessage();}}
4.加一个当检测第一个参数不合法时立即返回错误不会继续进行校验
packagecom.xl.annotation;importorg.hibernate.validator.HibernateValidator;importorg.springframework.context.annotation.Bean;importorg.springframework.context.annotation.Configuration;importjavax.validation.Validation;importjavax.validation.Validator;importjavax.validation.ValidatorFactory;@ConfigurationpublicclassValidatorConf{@BeanpublicValidatorvalidator(){ValidatorFactoryvalidatorFactory=Validation.byProvider(HibernateValidator.class).configure().failFast(true).buildValidatorFactory();Validatorvalidator=validatorFactory.getValidator();returnvalidator;}}
到此,关于“springboot参数格式怎么校验”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注恰卡编程网网站,小编会继续努力为大家带来更多实用的文章!
推荐阅读
-
vue动态添加删除输入框(springboot vue怎么让数据库显示出来)
springbootvue怎么让数据库显示出来?一般情况下是前端调阅后端接口,来获取到数据库的数据,后端哪里会把数据库的数据整理...
-
springboot实现基于aop的切面日志
本文实例为大家分享了springboot实现基于aop的切面日志的具体代码,供大家参考,具体内容如下通过aop的切面方式实现日志...
-
SpringBoot定时任务功能怎么实现
-
SpringBoot中的@Import注解怎么使用
-
SpringBoot整合Lombok及常见问题怎么解决
-
springboot图片验证码功能模块怎么实现
-
Springboot+SpringSecurity怎么实现图片验证码登录
-
SpringBoot注解的知识点有哪些
SpringBoot注解的知识点有哪些这篇“SpringBoot注...
-
SpringBoot2.x中management.security.enabled=false无效怎么解决
-
springboot怎么禁用某项健康检查
springboot怎么禁用某项健康检查今天小编给大家分享一下sp...