jfinal-4.9 增加全局异常拦截器

jfinal-4.9 增加全局异常拦截器

[思路]

编写1个实例类

添加拦截器,拦截异常,封装到实体类中,返回json数据

编辑一个实体类

package com.litong.jfinal.vo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class JsonBean<T> {

  private int code = 0; // 状态码

  private String msg = "执行成功"; // 状态说明

  private T data; // 数据内容

  public JsonBean(T data) {
    this.data = data;
  }

  public JsonBean(int code) {
    this.code = code;
  }

  public JsonBean(String msg) {
    this.msg=msg;
  }

  public JsonBean(int code, String msg) {
    this.code = code;
    this.msg = msg;
  }
}

全局异常拦截器

package com.litong.jfinal.interceptor;

import com.jfinal.aop.Interceptor;
import com.jfinal.aop.Invocation;
import com.jfinal.core.Controller;
import com.litong.jfinal.vo.JsonBean;

import lombok.extern.slf4j.Slf4j;

/**
 * @author bill robot
 * @date 2020年8月29日_下午5:45:26 
 * @version 1.0 
 * @desc
 * 全局异常烂机器
 */
@Slf4j
public class ExceptionInterceptor implements Interceptor {
  @Override
  public void intercept(Invocation invocation) {
    try {
      // 执行方法
      invocation.invoke();
    } catch (Exception e) {
      e.printStackTrace();
      log.error(e.getMessage());
      Controller c = invocation.getController();
      c.renderJson(new JsonBean<Void>(-1,e.getMessage()));
    }
  }
}


添加拦截器

  @Override
  public void configInterceptor(Interceptors me) {
    me.addGlobalActionInterceptor(new ExceptionInterceptor());
  }


评论区

杜福忠

2020-08-29 21:54

注释有灵魂“全局异常烂机器”

2020-08-31 15:42

用拦截器来做异常拦截的话,是不是会有这样的一个问题,@Clear的类就捕抓不到异常

李通

2020-09-01 11:52

@谢 取决拦截器的执行顺序和@Clear清除的拦截器

hb963724769

2020-09-10 13:37

上传文件时候,JFINAL默认有个10M的大小限制,当超过限制时,后台会异常,这个拦截器的renderJson到前端的message会为空(虽然你e.getMessage是有值的)。

李通

2020-09-10 17:38

@hb963724769 大致明白你说的,你可以提示一个详细的反馈吗?或者录制1个视频

hb963724769

2020-09-11 09:46

@李通


后端异常捕获成功,并返回JSON数据



image.png



前端共用ajax的err方法,提示用户报错信息,但是这个responseText为空



image.png

hb963724769

2020-09-11 09:48

@李通 我其他后台异常是可以正常捕获,并提示的,比如数据库字段超限,提示XXX

李通

2020-09-11 10:05

@hb963724769 使用poatman调用接口,返回是什么