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

歡迎評論和留言


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM