springboot如何传参校验@Valid及对其的异常捕获方式
发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,这篇文章将为大家详细讲解有关springboot如何传参校验@Valid及对其的异常捕获方式,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。传参校验@V
千家信息网最后更新 2026年11月01日springboot如何传参校验@Valid及对其的异常捕获方式
这篇文章将为大家详细讲解有关springboot如何传参校验@Valid及对其的异常捕获方式,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。
传参校验@Valid及对其的异常捕获
springboot参数经常需要进行校验,比如创建文件,文件名就需要进行一定的校验。
本文以创建文件夹为例进行参数校验:controller:
首先就是在需要校验的参数类前面添加注释@Valid
@ApiOperation(value = "创建目录", notes = "在某目录下创建新文件夹") @ApiResponses({ @ApiResponse(code = 500, response = RestCodeMsg.class, message = "错误") }) @PostMapping(value = "api/scene/createdir") public ResponseEntity其次对参数类进行校验设置:
@Data@ApiModel@Getter@Setter@NoArgsConstructorpublic class ixviewVo { @ApiModelProperty("是否文件夹") private boolean dir; @NotBlank(message="目录名称不能为空") @Pattern(regexp="[^\\s\\\\/:\\*\\?\\\"<>\\|\\.]*[^\\s\\\\/:\\*\\?\\\"<>\\|\\.]$",message="目录名称不符合标准") @ApiModelProperty("目录名称") private String dirname; @ApiModelProperty("上级目录ID") private Long parentId;}其中[^\\s\\\\/:\\*\\?\\\"<>\\|\\.]*[^\\s\\\\/:\\*\\?\\\"<>\\|\\.]$为文件名称校验的正则表达式,复制进代码记得去掉自动生成的\。
到此,对参数校验的全部设置完成。当参数不符合校验则会抛出异常,接下来就是对抛出的异常进行捕获:
@RestControllerAdvicepublic class BadRequestExceptionHandler { private static final Logger logger = LoggerFactory.getLogger(BadRequestExceptionHandler.class); @ExceptionHandler(MethodArgumentNotValidException.class) public ResponseEntity validationBodyException(MethodArgumentNotValidException exception){ BindingResult result = exception.getBindingResult(); if (result.hasErrors()) { List errors = result.getAllErrors(); errors.forEach(p ->{ FieldError fieldError = (FieldError) p; logger.error("Data check failure : object{"+fieldError.getObjectName()+"},field{"+fieldError.getField()+ "},errorMessage{"+fieldError.getDefaultMessage()+"}"); }); } return ResponseEntity.ok(getPublicBackValue(false, "目录名称不符合标准")); } public Map getPublicBackValue(boolean flag, String message) { Map map = new HashMap(); if (flag) { map.put("result_code", 0); } else { map.put("result_code", 1); } map.put("result_reason", message); return map; }} @Valid校验异常捕捉
@Api(tags = {"参数管理"})@Validated@RestController@RequestMapping("/module/param")public class TbModuleParamController {}public ResponseDTO getModuleParam(@PathVariable(name = "moduleId") @Valid @NotNull @Max(value = 13) @Min(value = 1) Integer moduleId) { QueryWrapper paramQueryWrapper = new QueryWrapper<>(); paramQueryWrapper.eq("module_id", moduleId).eq("state", 1); TbModuleParam moduleParam = moduleParamService.getOne(paramQueryWrapper); List queryParamVoList = new ArrayList<>(); if (moduleParam != null) { queryParamVoList = JSONArray.parseArray(moduleParam.getModuleJson(), QueryParamVo.class); } return ResponseDTO.defaultResponse(queryParamVoList); } @PostMapping(value = "/save", produces = WebServiceCommonConstant.PRODUCES_JSON) public ResponseDTOaddDict(@RequestBody @Validated LandInfoBasicVo saveVo) { boolean result = landInfoService.saveInfo(saveVo); return ResponseDTO.defaultResponse("保存成功"); }
@NotBlank(message = "土地名称不能为空") @Size(max = 1) private String landName;
@ControllerAdvicepublic class ExceptionHandle { private static final Logger logger = LoggerFactory.getLogger(ExceptionHandle.class); public static List msgList = new ArrayList<>(); /** * 异常处理 * * @param e 异常信息 * @return 返回类是我自定义的接口返回类,参数是返回码和返回结果,异常的返回结果为空字符串 */ @ExceptionHandler(value = Exception.class) @ResponseBody public ResponseDTO handle(Exception e) { //自定义异常返回对应编码 if (e instanceof PermissionException) { PermissionException ex = (PermissionException) e; return ResponseDTO.customErrorResponse(ex.getCode(), ex.getMessage()); } //其他异常报对应的信息 else { logger.info("[系统异常]{}", e.getMessage(), e); msgList.clear(); msgList.add(e.toString()); StackTraceElement[] stackTrace = e.getStackTrace(); for (StackTraceElement element : stackTrace) { msgList.add(element.getClassName() + ":" + element.getMethodName() + "," + element.getLineNumber()); } return ResponseDTO.customErrorResponse(-1, "系统内部错误"); } } @ExceptionHandler(value = MethodArgumentNotValidException.class) @ResponseBody public ResponseDTO handleMethodArgumentNotValidException(MethodArgumentNotValidException ex) { List message = new ArrayList<>(); if (ex.getBindingResult() != null) { for (FieldError item : ex.getBindingResult().getFieldErrors()) { String itemMessage = item.getDefaultMessage(); message.add(itemMessage); } } return ResponseDTO.customErrorResponse(-1, message.toString().replace("[","").replace("]","")); } @ExceptionHandler(value = ConstraintViolationException.class) @ResponseBody public ResponseDTO handleConstraintViolationException(ConstraintViolationException ex) { List message = new ArrayList<>(); Set> constraintViolations = ex.getConstraintViolations(); if (!CollectionUtils.isEmpty(constraintViolations)) { constraintViolations.forEach(v -> message.add(v.getMessage())); } return ResponseDTO.customErrorResponse(-1, message.toString().replace("[","").replace("]","")); }} 关于springboot如何传参校验@Valid及对其的异常捕获方式就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
参数
目录
名称
文件
内容
文件夹
方式
信息
就是
文章
更多
标准
知识
篇文章
系统
结果
错误
不错
成功
接下来
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
伟宏互联网科技
互联网科技网
互联网科技有限公司经营范围
礼当家互联网科技
极限挑战互联网科技
天津摩尔互联网科技
丰台科技园 互联网
重庆科技学院互联网
贵州叶脉互联网科技有限公司所属行业
崇明区互联网教育科技诚信经营
苏州五指互联网络科技有限
互联网科技公司有风险吗
坤平互联网科技
内蒙古九一互联网科技
互联网行业科技股
伍佰万互联网科技怎么赚钱
互联网风格科技公司名称
半导体行业属于互联网高科技类吗
保山浩联互联网科技有限公司
利用互联网等科技手段
互联网科技工作委员会毛军
狮子座互联网科技有限公司
无锡溥仪互联网科技有限公司
南山科技园互联网公司有哪些
健康食品互联网创新科技园项目
用友工业互联网科技发展
世界互联网领先科技成果获奖
江苏苏星互联网科技有限公司
扫呗互联网科技有限公司
福州德业互联网科技