SpringMVC异常处理知识点总结

  • ResultCode
  • CommonCode
  • UserCode
  • CustomException
  • ExceptionCatch
<parent>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-parent</artifactId>
  <version>2.1.9.RELEASE</version>
  <relativePath/> <!-- lookup parent from repository -->
</parent>
<dependencies>
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
  </dependency>
</dependencies>

统一异常处理

@ControllerAdvice

@ExceptionHandler

@ResponseBody

package com.mozq.mybatisplus.mybatisplus01.exception;

import com.mozq.mybatisplus.mybatisplus01.model.CommonCode;
import com.mozq.mybatisplus.mybatisplus01.model.Result;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;

@ControllerAdvice
public class ExceptionCatch {

  @ExceptionHandler(Exception.class)
  @ResponseBody
  public Result handleException(Exception e){
    return Result.of(CommonCode.SERVER_ERROR);
  }

  @ExceptionHandler(CustomException.class)
  @ResponseBody
  public Result handleException(CustomException e){
    return Result.of(e.getResultCode());
  }
}
package com.mozq.mybatisplus.mybatisplus01.exception;

import com.mozq.mybatisplus.mybatisplus01.model.ResultCode;

public class CustomException extends RuntimeException {
  private ResultCode resultCode;

  public CustomException(ResultCode resultCode){
    super("错误码:" + resultCode.code() + "错误消息:" + resultCode.message());
    this.resultCode = resultCode;
  }

  public ResultCode getResultCode(){
    return resultCode;
  }
}

异常处理测试

@RestController
@RequestMapping("/demo")
public class DemoController {

  //单个参数非空校验,使用@RequestParam
  @RequestMapping("/get")
  public String getName(@RequestParam String name){
    return name;
  }

  /*
  public Result myCustomException(boolean flag)
  不传参数默认false
  0-false 1-true 其他数字抛异常 MethodArgumentTypeMismatchException
  正确方式:
  localhost:8080/demo/myCustomException?flag=1
  localhost:8080/demo/myCustomException?flag=true
  */
  @RequestMapping("/myCustomException")
  public Result myCustomException(boolean flag){
    if(flag){
      throw new CustomException(UserCode.USER_NOT_EXIST);
    }
    return Result.ok();
  }
}

统一响应结果

package com.mozq.mybatisplus.mybatisplus01.model;

import lombok.Data;

import java.util.LinkedHashMap;

@Data
public class Result extends LinkedHashMap {
  private static final String SUCCESS = "success";
  private static final String CODE = "code";
  private static final String MESSAGE = "message";
  private static final String RESULT = "result";

  public static Result of(ResultCode resultCode){
    Result R = new Result();
    R.put(SUCCESS, resultCode.success());
    R.put(CODE, resultCode.code());
    R.put(MESSAGE, resultCode.message());
    return R;
  }

  public static Result ok(){
    return Result.of(CommonCode.SUCCESS);
  }

  public static Result okWithResult(Object data){
    Result R = Result.of(CommonCode.SUCCESS);
    R.put(RESULT, data);
    return R;
  }

  public static Result fail(){
    return Result.of(CommonCode.FAIL);
  }
}

响应状态码

package com.mozq.mybatisplus.mybatisplus01.model;

public interface ResultCode {
  boolean success();
  String code();
  String message();
}
package com.mozq.mybatisplus.mybatisplus01.model;

public enum CommonCode implements ResultCode {
  SUCCESS(true, "000000", "处理成功"),
  FAIL(true, "000001", "处理失败"),
  INVALID_PARAM(false, "100000", "无效的参数"),
  SERVER_ERROR(false, "999999", "系统忙,请稍后重试");

  private boolean success;
  private String code;
  private String message;
  CommonCode(boolean success, String code, String message){
    this.success = success;
    this.code = code;
    this.message = message;
  }

  @Override
  public boolean success() {
    return success;
  }

  @Override
  public String code() {
    return code;
  }

  @Override
  public String message() {
    return message;
  }
}
package com.mozq.mybatisplus.mybatisplus01.model;

public enum UserCode implements ResultCode {

  USER_USERNAME_ALREADY_EXIST(false, "200000", "用户名已经存在"),
  USER_TELEPHONE_ALREADY_USED(false, "200001", "电话号码已经存在"),
  USER_NOT_EXIST(false, "200002", "用户不存在");

  private boolean success;
  private String code;
  private String message;
  UserCode(boolean success, String code, String message){
    this.success = success;
    this.code = code;
    this.message = message;
  }

  @Override
  public boolean success() {
    return success;
  }

  @Override
  public String code() {
    return code;
  }

  @Override
  public String message() {
    return message;
  }
}

以上就是本次介绍的关于SpringMVC异常处理的相关知识点,感谢大家的学习和对我们的支持。

(0)

相关推荐

  • springmvc如何进行异常处理

    异常处理 局部处理(直接写在处理器中) @ExceptionHandler public ModelAndView error(Exception exception) { ModelAndView mv = new ModelAndView(); mv.addObject("error", exception.getMessage()); mv.setViewName("forward:../error.jsp"); return mv; } 全局处理(新建一个类

  • Spring MVC Controller返回值及异常的统一处理方法

    旧的设计方案 开发api的时候,需要先定义好接口的数据响应结果.如下是一个很简单直接的Controller实现方法及响应结果定义. @RestController @RequestMapping("/users") public class UserController { @Inject private UserService userService; @GetRequest("/{userId:\\d+}") public ResponseBean signin

  • 详解使用Spring MVC统一异常处理实战

    1 描述 在J2EE项目的开发中,不管是对底层的数据库操作过程,还是业务层的处理过程,还是控制层的处理过程,都不可避免会遇到各种可预知的.不可预知的异常需要处理.每个过程都单独处理异常,系统的代码耦合度高,工作量大且不好统一,维护的工作量也很大. 那么,能不能将所有类型的异常处理从各处理过程解耦出来,这样既保证了相关处理过程的功能较单一,也实现了异常信息的统一处理和维护?答案是肯定的.下面将介绍使用Spring MVC统一处理异常的解决和实现过程. 2 分析 Spring MVC处理异常有3种方

  • Spring MVC异常处理机制示例详解

    前言 在Spring MVC中,当一个请求发生异常(Controller抛出一个异常时), DispatcherServlet 采用委托的方式交给一个处理链来处理或者解析这个抛出的异常,这是在request和Servlet Container之间的一道屏障,所以我们可以在这里做一些处理工作,如转换异常,转换成友好的error page或者http 状态码等. 核心接口 这个处理机制在Spring是以HandlerExceptionResolver接口为核心的,该接口只有一个处理方法: Model

  • 基于SpringMVC的全局异常处理器介绍

    近几天又温习了一下SpringMVC的运行机制以及原理 我理解的springmvc,是设计模式MVC中C层,也就是Controller(控制)层,常用的注解有@Controller.@RequestMapping.@Autowared.@Component,今天呢,我所要写的是SpringMVC的全局异常处理器,关联的接口有HandlerExceptionResolver(Eclipse用户可以按Ctrl+Shift+T进行搜索该接口),什么是全局异常处理器?为什么要用它呢? 在企业开发中,各种

  • 详解Spring MVC/Boot 统一异常处理最佳实践

    前言 在 Web 开发中, 我们经常会需要处理各种异常, 这是一件棘手的事情, 对于很多人来说, 可能对异常处理有以下几个问题: 什么时候需要捕获(try-catch)异常, 什么时候需要抛出(throws)异常到上层. 在 dao 层捕获还是在 service 捕获, 还是在 controller 层捕获. 抛出异常后要怎么处理. 怎么返回给页面错误信息. 异常处理反例 既然谈到异常, 我们先来说一下异常处理的反例, 也是很多人容易犯的错误, 这里我们同时讲到前端处理和后端处理 : 捕获异常后

  • Spring MVC全局异常处理和单元测试_动力节点Java学院整理

    在spring MVC的配置文件中: <!-- 总错误处理--> <bean id="exceptionResolver" class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver"> <property name="defaultErrorView"> <value>/error/error</

  • Spring MVC中异常处理的三种方式

    前言 在 SpringMVC, SpringBoot 处理 web 请求时, 若遇到错误或者异常,返回给用户一个良好的错误信息比 Whitelabel Error Page 好的多. SpringMVC 提供了三种异常处理方式, 良好的运用它们可以给用户提供可读的错误信息. 1. 实现 HandlerExceptionResolver public class AppHandlerExceptionResolver implements HandlerExceptionResolver { @O

  • SpringMVC异常处理知识点总结

    ResultCode CommonCode UserCode CustomException ExceptionCatch <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.9.RELEASE</version> <relativeP

  • Java SpringMVC 异常处理SimpleMappingExceptionResolver类详解

    Spring3.0 对异常的处理方式总共有两种: 一种是使用 HandlerExceptionResolver 接口,并且 Spring 已经提供默认的实现类 SimpleMappingExceptionResolver. 第二种方法是在 Controller 内部实现,灵活性更高. 从目前的调查结果来看,这两种方式不能共存.我们一般在项目中使用第一种方法. 下面分别描述一下这两种使用方式: 一.基于 HandlerExceptionResolver 接口的方式 使用这种方式只需要实现 reso

  • Java SpringMVC异常处理机制详解

    目录 异常处理的思路 测试环境准备 异常处理两种方式 方式一:简单异常处理器 方式二:自定义异常处理器 总结 异常处理的思路 测试环境准备 首先写一个DemoController控制层的类作为测试访问的控制器 package com.itheima.controller; import com.itheima.exception.MyException; import com.itheima.service.DemoService; import org.springframework.bean

  • SpringMVC 异常处理机制与自定义异常处理方式

    目录 SpringMVC默认处理的几种异常 @ResponseStatus 异常处理的顺序 自定义异常类(SpringMVC的异常处理) ①:自定义异常类 ②:自定义异常处理器 ③:配置我们的异常处理器 本节介绍SpringMVC的异常处理机制 首先介绍SpringMVC默认提供了一些HTTP错误类似码的默认异常处理 如何给一个Controller自定义异常处理 如何为项目做一个全局异常处理 提到异常处理,就不得不提HandlerExceptionResolvers,我们的DispatcherS

  • Python异常处理知识点总结

    python提供了两个非常重要的功能来处理python程序在运行中出现的异常和错误.你可以使用该功能来调试python程序. 异常处理: 本站Python教程会具体介绍. 断言(Assertions):本站Python教程会具体介绍. python标准异常 异常名称 描述 BaseException 所有异常的基类 SystemExit 解释器请求退出 KeyboardInterrupt 用户中断执行(通常是输入^C) Exception 常规错误的基类 StopIteration 迭代器没有更

  • multi-catch和try-catch异常处理知识点详解

    multi-catch属于JDK1.7之后出现的,举例如下: class FactoryTest { public static Fruits getInstance(String className){ Fruits fruits=null; try { fruits=(Fruits)Class.forName(className).newInstance(); } catch (InstantiationException e) { // TODO Auto-generated catch

  • 详解SpringMVC中的异常处理

    1. SpringMVC默认三个异常处理类 ExceptionHandlerExceptionResolver:处理@ExceptionHandler注解 ResponseStatusExceptionResolver:处理@ResponseStatus注解 DefaultHandlerExceptionResolver:处理SpringMVC自带的异常 如果以上3个异常解析器都无法处理,会上抛给tomcat,处理异常内部的默认工作流程:所有异常解析器依次尝试解析,解析完成进行后续操作,解析失败

  • Java SpringMVC拦截器与异常处理机制详解分析

    目录 拦截器(interceptor)的作用 拦截器快速入门 案例:用户登录权限控制 拦截器方法说明 SpringMVC异常处理 异常处理的思路 异常处理两种方式 拦截器(interceptor)的作用 Spring MVC的拦截器类似于Servlet开发中的过滤器Filter,用于对处理器进行预处理和后处理. 将拦截器按一定的顺序联结成一条链,这条链称为拦截器链(Interceptor Chain).在访问被拦截的方法或字段时,拦截器链中的拦截器就会按其之前定义的顺序被调用.拦截器也是AOP思

  • SpringMVC项目异常处理机制详解

    目录 1.异常分类 2.自定义项目业务异常 3.自定义项目系统异常 4.其他异常 5.异常代码 6.异常处理器 7.异常发生 1.异常分类 通常分为三类:系统异常(SystemException),业务异常(BusinessException)和其他异常(Exception) 业务异常指由于用户的不规范操作产生的异常,如不合法的参数传入 系统异常指项目运行过程中可预计但无法避免的异常,如数据库宕机 其他异常指开发者未曾预料到的异常 2.自定义项目业务异常 public class Busines

  • 详解SpringMVC中的异常处理机制

    目录 开头 1.ExceptionHandlerExceptionResolver 2. demo 开头 试想一下我们一般怎么统一处理异常呢,答:切面.但抛开切面不讲,如果对每一个controller方法抛出的异常做专门处理,那么着实太费劲了,有没有更好的方法呢?当然有,就是本篇文章接下来要介绍的springmvc的异常处理机制,用到了ControllerAdvice和ExceptionHandler注解,有点切面的感觉哈哈. 1.ExceptionHandlerExceptionResolve

随机推荐