SpringBoot ErrorController 實踐


SpringBoot的默認異常處理映射為“/error”。BasicErrorController已經默認實現了“text/html”的處理,如果想返回自定義JSON格式信息,則實現“ErrorController ”接口,增加一個produces 為“application/json”的方法即可,如:

@RestController
public class ExceptionController implements ErrorController {

    @Autowired
    private ErrorAttributes errorAttributes;

    /**
     * 默認錯誤
     */
    private static final String path_default = "/error";

    @Override
    public String getErrorPath() {
        return path_default;
    }

    /**
     * JSON格式錯誤信息
     */
    @RequestMapping(value = path_default,  produces = {MediaType.APPLICATION_JSON_VALUE})
    public ResponseMessage error(HttpServletRequest request) {
        RequestAttributes requestAttributes = new ServletRequestAttributes(request);
        Map<String, Object> body = this.errorAttributes.getErrorAttributes(requestAttributes, true);
        return ResponseMessage.fail("服務器端異常!", body);
    }

}

ResponseMessage 為自定義的實體類,用於向前端返回統一格式信息,結構如:

public class ResponseMessage {

    /**
     * 是否成功
     */
    private boolean success;

    /**
     * 返回文字
     */
    private String msg;

    /**
     * 返回數據
     */
    private Object data;

    public ResponseMessage() {
    }

    public ResponseMessage(boolean success, String msg, Object data) {
        this.success = success;
        this.msg = msg;
        this.data = data;
    }

    public boolean isSuccess() {
        return success;
    }

    public void setSuccess(boolean success) {
        this.success = success;
    }

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public Object getData() {
        return data;
    }

    public void setData(Object data) {
        this.data = data;
    }

    public static ResponseMessage success(){
        return new ResponseMessage(true, null, null);
    }

    /**
     * 成功返回方法
     * @param data 返回數據
     */
    public static ResponseMessage success(Object data){
        return new ResponseMessage(true, null, data);
    }

    /**
     * 失敗返回方法--默認
     */
    public static ResponseMessage fail(){
        return new ResponseMessage(false, null, null);
    }

    /**
     * 失敗返回方法
     * @param message 文字信息
     */
    public static ResponseMessage fail(String message){
        return new ResponseMessage(false, message, null);
    }

    /**
     * 失敗返回方法
     * @param message 文字信息
     * @param data 數據
     */
    public static ResponseMessage fail(String message, Object data){
        return new ResponseMessage(false, message, data);
    }

}

開發者可以根據實際業務進行擴展次實體類,如增加時間戳、錯誤碼等信息


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM