好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

springboot 参数格式校验操作

springboot 参数格式校验

@Validated

字面意思校验

@RequestBody

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

@Validated

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

进入到请求体参数中。

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

查看更多关于springboot 参数格式校验操作的详细内容...

  阅读:20次