springboot|springboot 参数格式校验操作
springboot 参数格式校验
@Validated
字面意思校验
【springboot|springboot 参数格式校验操作】
文章图片
@RequestBody
该注解不用多说,意思是接收为json格式的参数
@Validated
字面意思校验, 需要配合@NotBlank 或者 @NotNull 注解才能生效
进入到请求体参数中。
文章图片
springboot 参数注解校验
1.添加依赖
org.springframework.boot spring-boot-starter-validation
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; @Datapublic 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 = "https://www.it610.com/article/30.50", message = "余额不能超过30.5")@DecimalMin(value = "https://www.it610.com/article/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 = "https://www.it610.com/article/手机验证",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 = https://www.it610.com/article/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 = "https://www.it610.com/article/测试", notes = "")public Stringtest(@ApiParam(name = "test", value = "https://www.it610.com/article/参数", 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; /** * 自定义验证抛出异常 */@RestControllerAdvicepublic class GlobalExceptionHandler {@ExceptionHandler(ValidationException.class)@ResponseStatus(HttpStatus.BAD_REQUEST)public String handle(ValidationException exception) {if(exception instanceof ConstraintViolationException){ConstraintViolationException exs = (ConstraintViolationException) exception; Set> 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; @Configurationpublic class ValidatorConf {@Beanpublic Validator validator() {ValidatorFactory validatorFactory = Validation.byProvider( HibernateValidator.class ).configure().failFast( true ).buildValidatorFactory(); Validator validator = validatorFactory.getValidator(); return validator; }}
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
推荐阅读
- Activiti(一)SpringBoot2集成Activiti6
- SpringBoot调用公共模块的自定义注解失效的解决
- 解决SpringBoot引用别的模块无法注入的问题
- 视频转换器哪种好用()
- [源码解析]|[源码解析] NVIDIA HugeCTR,GPU版本参数服务器---(3)
- 接口|axios接口报错-参数类型错误解决
- springboot使用redis缓存
- 怎么将桌面上的CAD图纸添加到软件中进行BMP格式转换()
- performSelectorOnMainThread:withObject:waitUntilDone:参数设置为NO或YES的区别
- springboot整合数据库连接池-->druid