SpringBoot configures global custom exceptions

Unlike Springmvc global exceptions in traditional collections, see the previous section, https://www.cnblogs.com/zwdx/p/8963311.html

For the springboot framework, I will introduce one of them.

1、ExceptionHandlerAdvice

import javax.servlet.http.HttpServletResponse;

import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;


/**
 * Handling exception information*@author wdh
 *
 */
@ControllerAdvice
@ResponseBody
public class ExceptionHandlerAdvice extends MyExecption{
    
    @ExceptionHandler(Exception.class)
    public ResultDTO handleException(Exception e,HttpServletResponse response) {
        return handler(e, response);
    }

}

Because the front and rear ends are separated, use @ResponseBody to return to JSON.

2、MyExecptionHandler

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.http.HttpServletResponse;import net.sf.json.JSONObject;
/**
 * Custom exception handling*@author wdh
 *
 */
public class MyExecptionHandler{
    
    public ResultDTO handler(Exception e,HttpServletResponse response){
        ResultDTO result;
        if (e instanceof SysException) {
            result = handleSysException((SysException) e);
        } else if (e instanceof ServiceException) {
            result = handleServiceException((ServiceException) e);
        } else {
            result = handleSysException(new SysException(ERRORConstants.COMMON_SYSTEM_ERROR, e));
        }
        responseOutWithJson(response, result);
        return result;
    }

    private ResultDTO handleSysException(SysException ex) {
        ResultDTO result = new ResultDTO();
        result.setCode(ex.getCode());
        if(StringUtil.isNotEmpty(ex.getMsg())){
            result.setMessage(ex.getMsg());
        }else {
             result.setMessage(MessageEnums.fromcode(ex.getCode()));
        }
        return result;
    }

    private ResultDTO handleServiceException(ServiceException ex) {
        ResultDTO result = new ResultDTO();
        result.setCode(ex.getCode());
        result.setMessage(MessageEnums.fromcode(ex.getCode()));

        return result;
    }

    protected void responseOutWithJson(HttpServletResponse response, Object responseObject) {

        JSONObject responseJSONObject = JSONObject.fromObject(responseObject);

        String jsonString = responseJSONObject.toString();
        String code = responseJSONObject.getString("code");
        if (ERRORConstants.COMMON_EXCEL_FORMAT_ERROR.equals(code)) {
            response.setContentType("text/html;charset=UTF-8");
        } else {
            response.setContentType("application/json; charset=utf-8");
        }
        response.setCharacterEncoding(GlobalConstants.DEFAULT_ENCODING);

        PrintWriter out = null;
        try {
            out = response.getWriter();
            out.append(jsonString);

        } catch (IOException e) {

        } finally {
            if (out != null) {
                out.close();
            }
        }
    }
}

The exception code is defined for itself.GlobalConstants,MessageEnums

Leave a Reply

Your email address will not be published. Required fields are marked *