404异常处理



package cn.gilight.dms.interceptor;

import cn.gilight.dms.base.ResultMessage;
import cn.gilight.dms.base.ResultType;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.servlet.NoHandlerFoundException;

import javax.servlet.http.HttpServletRequest;
import java.util.HashMap;
import java.util.Map;

@ControllerAdvice

public class GlobalExceptionHandler {

/***

* 404处理

* @param e

* @return

*/

@ExceptionHandler(NoHandlerFoundException.class)

@ResponseBody

@ResponseStatus(HttpStatus.NOT_FOUND)

    public Object notFountHandler(HttpServletRequest request,

NoHandlerFoundException e){

ResultMessage resultMessage = new ResultMessage();

resultMessage.setStatus(ResultType.NOT_FOUND.getStatus());

resultMessage.setMessage(ResultType.NOT_FOUND.getMessage());

resultMessage.setApi(request.getRequestURI());

resultMessage.setMethod(request.getMethod());

return resultMessage;

    }

}

# 自定义404

#出现错误时, 直接抛出异常

spring.mvc.throw-exception-if-no-handler-found=true

#不要为我们工程中的资源文件建立映射

#spring.resources.add-mappings=false

以上方法会屏蔽静态资源,所以推荐一下方法重写框架404处理

接口

package cn.gilight.dms.interceptor;

import cn.gilight.dms.base.ResultMessage;
import cn.gilight.dms.base.ResultType;
import org.springframework.boot.web.servlet.error.ErrorController;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**

* @program: NotFoundException

* @description: 处理404异常,返回自定义json,捕获返回时异常

* @author: douxiaoliang

* @create: 2019-07-31 10:32

* @Version V1.0

**/

@RestController

public class NotFoundException implements ErrorController {

@Override

    public String getErrorPath() {

return “/error”;

    }

@RequestMapping(value = {"/error"})

    public Object error(HttpServletRequest request, HttpServletResponse response)
{

ResultMessage resultMessage = new ResultMessage();

if (ResultType.NOT_FOUND.getStatus().equals(response.getStatus())){

resultMessage.setStatus(ResultType.NOT_FOUND.getStatus());

resultMessage.setMessage(ResultType.NOT_FOUND.getMessage());

}else if (ResultType.ERROR.getStatus().equals(response.getStatus())){

resultMessage.setStatus(ResultType.ERROR.getStatus());

resultMessage.setMessage(ResultType.ERROR.getMessage());

}else {

resultMessage.setStatus(ResultType.UNKNOW_ERROR.getStatus());

resultMessage.setMessage(ResultType.UNKNOW_ERROR.getMessage());

        }

resultMessage.setApi(request.getRequestURI());

resultMessage.setMethod(request.getMethod());

System.out.println(response.getStatus());

return resultMessage;

    }
}