zoukankan      html  css  js  c++  java
  • @Validated 参数校验及配置

    简单使用

    @ApiOperation( value = "根据实施清单编码办理项查询" )
    @PostMapping( "getTransactPageList" )
    @ApiImplicitParams( {
    			    @ApiImplicitParam( name = "page", value = "页码", paramType = "query", dataType = "String" ),
    			    @ApiImplicitParam( name = "limit", value = "数量", paramType = "query", dataType = "String" ),
    			    @ApiImplicitParam( name = "taskCode", value = "实施清单编码", paramType = "query", dataType = "String" ),
    			    @ApiImplicitParam( name = "transactName", value = "办理项名称,默认为空", paramType = "query", dataType = "String" )
    		    } )
    public Object getTransactPageList( @NotBlank(message = "页码不能为空") String page,
    				   @NotBlank(message = "每页数目不能为空") String limit,
    				   @NotBlank(message = "实施清单编码不能为空") String taskCode,
    				   String transactName )
    {
    	return(zwwPhaseService.getTransactPageList( page, limit, taskCode, transactName ) );
    }
    

    在实体类中使用

    @ApiModel( value = "根据实施清单编码办理项查询参数" )
    @Data
    @Accessors( chain = true )
    public class ProjectPageListDto {
    	@NotBlank( message = "页数不能为空" ) /* 在实体属性上标注校验 */
    	@ApiModelProperty( value = "页数" )
    	private String page;
    	@NotBlank( message = "每页数目不能为空" )
    	@ApiModelProperty( value = "每页数目" )
    	private String limit;
    	@ApiModelProperty( value = "部门编码" )
    	private String deptCode;
    	@ApiModelProperty( value = "实施清单父级编码" )
    	private String parentCode;
    	@ApiModelProperty( value = "实施清单名称,模糊查询,默认为空" )
    	private String taskName;
    	@ApiModelProperty( value = "事项主题" )
    	private String subject;
    	@ApiModelProperty( value = "网办深度" )
    	private String networkDepth;
    	@ApiModelProperty( value = "面向对象1:自然人2:法人" )
    	private String serviceCode;
    	@NotBlank( message = "所属区划不能为空" )
    	@ApiModelProperty( value = "所属区划" )
    	private String regionCode;
    	@ApiModelProperty( value = "事项类型" )
    	private String taskType;
    }
    
    /* 在接收参数前标注@Validated */
    
    @ApiOperation( value = "根据部门等条件查询实施清单" )
    @PostMapping( "getProjectPageList" )
    public Object getProjectPageList( @Validated ProjectPageListDto projectPageListDto )
    {
    	return(zwwPhaseService.getProjectPageList( projectPageListDto ) );
    }
    

    注意,使用时需要在controller头部加上@Validated注解,否则不会生效

    统一处理校验异常

    @ControllerAdvice
    @Slf4j
    public class ExceptionAdvice {
    
    @ResponseBody
    @ExceptionHandler(ConstraintViolationException.class)
    public Response handleConstraintViolationException(ConstraintViolationException exception){
    String msg = exception.getConstraintViolations().stream().map(ConstraintViolation::getMessage).collect(Collectors.joining());
    Response response = new Response();
    return response.setCode(StatusCode.PARAM_ERROR.getCode()).setMessage(msg);
    }
    @ExceptionHandler(MethodArgumentNotValidException.class)
    @ResponseBody
    public Response handleMethodArgumentNotValidException(MethodArgumentNotValidException e){
    String msg = e.getBindingResult().getAllErrors().stream().map(DefaultMessageSourceResolvable::getDefaultMessage).collect(Collectors.joining());
    return new Response().setCode(StatusCode.PARAM_ERROR.getCode()).setMessage(msg);
    }
    @ExceptionHandler(BindException.class)
    @ResponseBody
    public Response handleBindException(BindException e){
    String msg = e.getBindingResult().getAllErrors().stream().map(DefaultMessageSourceResolvable::getDefaultMessage).collect(Collectors.joining());
    return new Response().setCode(StatusCode.PARAM_ERROR.getCode()).setMessage(msg);
    }
    
    }
    

    遇到一个错误就抛出

    有时候我们并不想等所有的都校验完返回一堆错误,而是想让它在碰到一个校验错误时就直接抛出,可以如下配置
    自定义配置类 ValidatorConfig

    package com.zz.spxt.component.config;
    import org.hibernate.validator.HibernateValidator;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.validation.beanvalidation.MethodValidationPostProcessor;
    import javax.validation.Validation;
    import javax.validation.Validator;
    import javax.validation.ValidatorFactory;
    /**
    * @Author: yang
    * @Date: Create in 2020/6/17
    * @Description:
    * @Modify By:
    */
    @Configuration
    public class ValidatorConfig {
    @Bean
    public Validator validator(){
    ValidatorFactory validatorFactory = Validation.byProvider(HibernateValidator.class)
    .configure()
    //failFast的意思只要出现校验失败的情况,就立即结束校验,不再进行后续的校验。
    .failFast(true)
    .buildValidatorFactory();
    return validatorFactory.getValidator();
    }
    @Bean
    public MethodValidationPostProcessor methodValidationPostProcessor() {
    MethodValidationPostProcessor methodValidationPostProcessor = new MethodValidationPostProcessor();
    methodValidationPostProcessor.setValidator(validator());
    return methodValidationPostProcessor;
    }
    }
    

    欢迎评论和留言

  • 相关阅读:
    大聊Python----SocketServer
    2、MySQL常见数据库引擎及比较?
    大聊Python----通过Socket实现简单的ssh客户端
    1、列举常见的关系型数据库和非关系型都有那些?
    uva12563 Jin Ge Jin Qu hao(01背包)
    UVA 12174 Shuffle(滑动窗口)
    C++中substr函数的用法
    uva11078
    11462 Age Sort(计数排序)
    UVA 11988 Broken Keyboard (a.k.a. Beiju Text) (链表,模拟)
  • 原文地址:https://www.cnblogs.com/gyyyblog/p/13164276.html
Copyright © 2011-2022 走看看