SpringBoot统一数据返回模板---全局异常处理

一、统一数据返回模板

创建一个消息类Message.java,代码如下

package com.ws.demo.vo;

import com.ws.demo.enumClass.CallType;

public class Message {

    //调用结果类型
    private CallType callType;
    //消息
    private String msg;
    //数据
    private Object data;
    //状态码
    private Integer status;
    //异常链接
    private String url;

	/**
	 * 此处省略  get set toString
	 **/
    
    public Message() {
    }

    /**
     * 错误返回
     * @param callType
     * @param msg
     */
    public Message(CallType callType, String msg, Integer status, String url) {
        this.callType = callType;
        this.msg = msg;
        this.status = status;
        this.url = url;
    }

    /**
     * 成功返回
     * @param callType
     * @param msg
     * @param data
     */
    public Message(CallType callType, String msg, Object data, Integer status) {
        this.callType = callType;
        this.msg = msg;
        this.data = data;
        this.status = status;
    }

    /**
     * 返回成功消息
     * @param data  返回数据
     * @return
     */
    public static Message success(Object data){
        return new Message(CallType.success,"操作成功!",data,0);
    }

    /**
     * 返回失败消息
     * @param msg
     * @return
     */
    public static Message unsuccess(String msg,String url){
        return new Message(CallType.error,msg,-1,url);
    }
}

创建调用结果状态枚举类CallType.java,代码如下

package com.ws.demo.enumClass;

public enum CallType {
    success,
    warn,
    error;
}

来测试一下吧

@RestController
public class TestController {

    @RequestMapping("testMessage")
    public Message testMessage(){
        //SocketMsg为一个实体类
        SocketMsg sm = null;
        try {
            sm = null;
            sm = new SocketMsg();
            sm.setFromUser("LFQ");
            sm.setMsg("我来了!");
            sm.setToUser("YXX");
            sm.setType(1);
            //此处模拟代码出现异常
            //int flag = 1 / 0;
        } catch (Exception e) {
        	//失败状态下调用unsuccess方法
            return Message.unsuccess(e.getMessage(),request.getRequestURI());
        }
        //成功状态下调用success方法
        return Message.success(sm);
    }
}

效果如下:
在这里插入图片描述

二、全局异常处理

1、定义一个异常类HospitalException.java,继承Exception

public class HospitalException extends Exception{
    public HospitalException(String message) {
        super(message);
    }
}

2、创建自定义异常类型枚举类ExceptionType.java

public enum ExceptionType {
    SqlException("数据库异常!"),
    ServiceException("算法服务调用失败!"),
    NullException("未知异常!");
    
    private String msg;
    
    ExceptionType(String msg) {
        this.msg = msg;
    }
    
    public String getMsg() {return msg;}
    public void setMsg(String msg) {this.msg = msg;}
}

3、配置全局异常处理器,处理HospitalException

@Configuration
@ControllerAdvice
public class ExceptionController {

    /**
     * //异常处理器,处理HospitalException异常
     * @param request
     * @param e
     * @return
     */
    @ResponseBody
    @ExceptionHandler(value = HospitalException.class)
    public ResponseEntity<?> hanlerException(HttpServletRequest request, HospitalException e){
    	//返回自定义消息
        Message error = Message.unsuccess(e.getMessage(),request.getRequestURI());
        return new ResponseEntity<>(error, HttpStatus.OK);
    }
}

4、来测试一下吧

@RestController
public class TestController {

    @RequestMapping("testMessage")
    public Message testMessage(HttpServletRequest request)throws HospitalException{

        SocketMsg sm = null;
        try {
            sm = null;
            sm = new SocketMsg();
            sm.setFromUser("LFQ");
            sm.setMsg("我来了!");
            sm.setToUser("YXX");
            sm.setType(1);
            //模拟出现异常
            int flag = 1 / 0;
        } catch (Exception e) {
            ExceptionType et = ExceptionType.NullException;
            //这里消息也可以是系统异常消息
            throw new HospitalException(et.getMsg());
        }
        return Message.success(sm);
    }
}

效果如下
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值