栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

SpringBoot的请求参数校验及全局异常处理

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

SpringBoot的请求参数校验及全局异常处理

SpringBoot的请求参数校验及全局异常处理 适用场景
  • 请求路径参数的校验
  • JSON类型的请求参数校验
  • 异常处理
环境搭建 工程构建
  1. 使用IDEA快速构建一个SpringBoot工程,并引入以下依赖:
    
    
        org.springframework.boot
        spring-boot-starter-web
    
    
    
        org.springframework.boot
        spring-boot-starter-validation
    
    
  2. 封装返回对象
    状态枚举类
    public enum ResponseCodeEnum {
        
        SUCCESS(0),
        
        FAIL(1);
    
    
        private Integer value;
    
        ResponseCodeEnum(Integer value) {
            this.value = value;
        }
    
        public Integer getValue() {
            return value;
        }
    
    }
    
    响应结果
    public class ResponseData implements Serializable {
        private static final long serialVersionUID = 20220510L;
        
        private int code;
        
        private String message;
        
        private T data;
    
        public ResponseData() {
        }
    
        public ResponseData(int code, String message) {
            this.code = code;
            this.message = message;
        }
    
        public ResponseData(int code, String message, T data) {
            this.code = code;
            this.message = message;
            this.data = data;
        }
    
        public int getCode() {
            return code;
        }
    
        public void setCode(int code) {
            this.code = code;
        }
    
        public String getMessage() {
            return message;
        }
    
        public void setMessage(String message) {
            this.message = message;
        }
    
        public T getData() {
            return data;
        }
    
        public void setData(T data) {
            this.data = data;
        }
    
        public static  ResponseData ok(String message) {
            return new ResponseData(ResponseCodeEnum.SUCCESS.getValue(), message);
        }
    
        public static  ResponseData ok(String message, T data) {
            return new ResponseData(ResponseCodeEnum.SUCCESS.getValue(), message, data);
        }
    
        public static  ResponseData fail(String message) {
            return new ResponseData(ResponseCodeEnum.FAIL.getValue(), message);
        }
    
    }
    
  3. 自定义异常
    public class DbManagementException extends RuntimeException {
        
        private String errorMsg;
    
        public DbManagementException(String errorMsg) {
            this.errorMsg = errorMsg;
        }
    
        public String getErrorMsg() {
            return errorMsg;
        }
    
        public void setErrorMsg(String errorMsg) {
            this.errorMsg = errorMsg;
        }
    }
    
  4. 创建异常处理器
    @RestControllerAdvice
    public class GlobalExceptionHandler {
        
        private static Logger logger = LoggerFactory.getLogger(GlobalExceptionHandler.class);
    
        
        @ExceptionHandler(value = DbManagementException.class)
        public ResponseData dbManagementExceptionHandler(DbManagementException exception) {
            logger.error(exception.getMessage(), exception);
            return ResponseData.fail(exception.getErrorMsg());
        }
    
        
        @ExceptionHandler(value = MethodArgumentNotValidException.class)
        public ResponseData methodArgumentNotValidExceptionHandler(MethodArgumentNotValidException exception) {
            StringBuffer errStr = new StringBuffer();
    
            BindingResult bindingResult = exception.getBindingResult();
            boolean hasErrors = bindingResult.hasErrors();
            if (hasErrors) {
                List allErrors = bindingResult.getAllErrors();
                for (ObjectError allError : allErrors) {
                    FieldError err = (FieldError) allError;
                    String field = err.getField();
                    String defaultMessage = allError.getDefaultMessage();
                    errStr.append("[").append(field)
                            .append("]:")
                            .append(defaultMessage)
                            .append(";");
                }
            }
            logger.error(exception.getMessage(), exception);
    
            return ResponseData.fail(errStr.toString());
        }
    
        
        @ExceptionHandler(value = MissingServletRequestParameterException.class)
        public ResponseData missingServletRequestParameterException(MissingServletRequestParameterException exception) {
            String parameterName = exception.getParameterName();
            String parameterType = exception.getParameterType();
            StringBuffer errStr = new StringBuffer();
            errStr.append("[").append(parameterName)
                    .append("]")
                    .append(":")
                    .append("is required,")
                    .append("type")
                    .append(":")
                    .append(parameterType);
    
            logger.error(exception.getMessage(), exception);
            return ResponseData.fail(errStr.toString());
        }
    
        
        @ExceptionHandler(value = Exception.class)
        public ResponseData otherExceptionHandler(Exception exception) {
            logger.error(exception.getMessage(), exception);
            return ResponseData.fail("系统异常");
        }
    }
    
  5. 测试
    用于演示json类型的请求参数
    public class JsonParam {
        
        @NotNull(message = "id不能为空")
        private Long id;
        
        @Length(message = "姓名长度不在有效范围", max = 6, min = 2)
        @NotBlank(message = "姓名不能为空")
        private String name;
        
        @NotBlank(message = "地址不能为空")
        private String address;
        
        @Size(message = "好友列表长度不在有效范围内", min = 1, max = 3)
        @NotEmpty(message = "好友列表不能为空")
        private List friends;
    
        public JsonParam() {
        }
    
        public JsonParam(Long id, String name, String address, List friends) {
            this.id = id;
            this.name = name;
            this.address = address;
            this.friends = friends;
        }
    
        public Long getId() {
            return id;
        }
    
        public void setId(Long id) {
            this.id = id;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public String getAddress() {
            return address;
        }
    
        public void setAddress(String address) {
            this.address = address;
        }
    
        public List getFriends() {
            return friends;
        }
    
        public void setFriends(List friends) {
            this.friends = friends;
        }
    
        @Override
        public String toString() {
            return "JsonParam{" +
                    "id=" + id +
                    ", name='" + name + ''' +
                    ", address='" + address + ''' +
                    ", friends=" + friends +
                    '}';
        }
    }
    
    @Validated
    @RequestMapping("/demo")
    @RestController
    public class DemoController {
    
        
        @RequestMapping("/json")
        public ResponseData jsonCheck(@RequestBody @Valid JsonParam params) {
            return ResponseData.ok("Success", params);
        }
    
        
        @RequestMapping("/path")
        public ResponseData pathCheck(@RequestParam("username") String username, @RequestParam("password") String password) {
            return ResponseData.ok("Success", username + ":" + password);
        }
    
        
        @GetMapping("/customize")
        public ResponseData customize() {
            throw new DbManagementException("自定义异常");
        }
    
        
        @GetMapping("/other")
        public ResponseData other() {
            int i = 1 / 0;
            return ResponseData.ok("Success");
        }
    }
    
    




转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/873834.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号