做网站要多钱,邢台一天seo,响应式门户网站模板下载,公众号链接wordpress前言
在上一节内容中#xff0c;我们介绍了如何在webflux项目中自定义实现一个全局的异常处理器ErrorWebExceptionHandler#xff0c;正常情况下其可以处理我们系统的运行时异常#xff0c;但是无法处理参数验证的异常WebExchangeBindException#xff0c;所以这里提供另外…前言
在上一节内容中我们介绍了如何在webflux项目中自定义实现一个全局的异常处理器ErrorWebExceptionHandler正常情况下其可以处理我们系统的运行时异常但是无法处理参数验证的异常WebExchangeBindException所以这里提供另外的全局异常处理方式通过注解ExceptionHandler实现参数验证的全局异常处理。
本节内容主要是实现webflux项目集成spring-boot-starter-validation验证框架完成请求接口参数的后台验证实现接口请求参数的统一验证处理返回统一的响应数据格式。
正文
①引入请求参数验证框架spring-boot-starter-validation
dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-validation/artifactId
/dependency ②创建全局的参数验证异常处理器GlobalExceptionHandler
package com.yundi.atp.exception;import com.yundi.atp.common.ApiResponse;
import com.yundi.atp.common.ErrorCode;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.BindingResult;
import org.springframework.validation.FieldError;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import org.springframework.web.bind.support.WebExchangeBindException;
import reactor.core.publisher.Mono;import java.util.List;Slf4j
RestControllerAdvice
public class GlobalExceptionHandler {/*** 参数验证异常** param ex* return*/ExceptionHandler(WebExchangeBindException.class)public MonoApiResponse handleWebExchangeBindException(WebExchangeBindException ex) {log.info(参数验证异常: ex);// 处理绑定异常BindingResult result ex.getBindingResult();ListFieldError fieldErrors result.getFieldErrors();return Mono.just(ApiResponse.fail(ErrorCode.WEB_EXCHANGE_BIND_ERROR.getCode(), fieldErrors.get(0).getDefaultMessage()));}/*** 数学计算异常** param ex* return*/ExceptionHandler(ArithmeticException.class)public MonoApiResponse handleArithmeticException(ArithmeticException ex) {log.info(数学计算异常: ex);return Mono.just(ApiResponse.fail(ErrorCode.ARITHMETIC_ERROR.getCode(), ErrorCode.ARITHMETIC_ERROR.getMsg()));}/*** 自定义异常** param ex* return*/ExceptionHandler(MyException.class)public MonoApiResponse handleMyException(MyException ex) {log.info(自定义异常 ex);return Mono.just(ApiResponse.fail(ex.getCode(), ex.getMessage()));}/*** 兜底异常** param ex* return*/ExceptionHandler(Exception.class)public MonoApiResponse handleMyException(Exception ex) {log.info(系统异常 ex);return Mono.just(ApiResponse.fail(ErrorCode.SYSTEM_ERROR.getCode(), ErrorCode.SYSTEM_ERROR.getMsg()));}
}③ ErrorCode统一定义错误码方便根据相关错误码处理业务
package com.yundi.atp.common;public enum ErrorCode {SYSTEM_ERROR(10000, 系统错误!),ARITHMETIC_ERROR(10001, 数学计算异常),WEB_EXCHANGE_BIND_ERROR(10002, 参数验证异常),;private Integer code;private String msg;ErrorCode(Integer code, String message) {this.code code;this.msg message;}public Integer getCode() {return code;}public void setCode(Integer code) {this.code code;}public String getMsg() {return msg;}public void setMsg(String msg) {this.msg msg;}
}④以新增用户数据为例增加用户数据的验证
package com.yundi.atp.entity;import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import org.springframework.data.annotation.Id;
import org.springframework.data.relational.core.mapping.Table;Schema(name User, description 用户类)
Table(name user)
Data
public class User {IdSchema(name id, description 用户ID)private Integer id;NotBlank(message 用户名称不得为空)Schema(name name, description 用户名称)private String name;NotNull(message 用户年龄不得为空)Schema(name age, description 用户年龄)private Integer age;
} ⑤在保存用户请求接口中使用Valid注解开启请求参数验证 ⑥ 启动webflux应用使用swagger工具测试保存用户接口验证参数注解生效并按照统一响应格式返回了数据 ⑦ 验证用户年龄的参数不为空 ⑧ swagger需要使用专属webflux的springdoc-openapi-starter-webflux-ui启动器
!-- https://mvnrepository.com/artifact/org.springdoc/springdoc-openapi-starter-webflux-ui --
dependencygroupIdorg.springdoc/groupIdartifactIdspringdoc-openapi-starter-webflux-ui/artifactIdversion2.3.0/version
/dependency
结语
关于webflux项目的请求参数验证以及统一的参数验证异常处理的内容到这里就结束了我们下期见。。。