springboot에서rest 인터페이스 404500 json 형식으로 되돌아오기

2704 단어 restspringboot
rest 인터페이스를 개발할 때, 우리는 종종 통일된 반환 형식을 정의한다. 예를 들어 다음과 같다.
{  "status": true,  "code": 200,  "message": null,  "data": [
    {      "id": "101",      "name": "jack"
    },
    {      "id": "102",      "name": "jason"
    }
  ]
}

그러나 호출자가 우리api를 요청할 때 인터페이스 주소를 잘못 쓰면 404 오류가 발생합니다. 전통적인 웹 시스템에서 우리는 404 오류 페이지를 사용자 정의하여 더욱 우호적인 모습을 보일 수 있습니다.
spring boot에서도 다음과 같은 json 형식의 데이터가 반환됩니다.
{  "timestamp": 1492063521109,  "status": 404,  "error": "Not Found",  "message": "No message available",  "path": "/rest11/auth"}

어느 주소를 찾지 못했는지 알려주는 것도 우호적이지만 위에서 정의한 데이터 형식이 아래와 일치하지 않기 때문에 사용자가 이 반환을 받을 때 식별할 수 없습니다. 그 중에서 가장 뚜렷한 것은status 필드입니다.
우리가 정의한 것은boolean 형식으로 성공 여부를 표시합니다
여기 되돌아오는 게 http 상태 코드예요.
그래서 우리는 이런 시스템 오류가 발생할 때도 우리가 정의한 그 형식을 되돌려줄 수 있어야 한다
비정상 처리 클래스 정의
import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.web.bind.annotation.ControllerAdvice;import org.springframework.web.bind.annotation.ExceptionHandler;import org.springframework.web.bind.annotation.ResponseBody;

   :www.1b23.com 
@ControllerAdvicepublic class GlobalExceptionHandler {    private Logger logger = LoggerFactory.getLogger(GlobalExceptionHandler.class); 
    /**
     *       ,  :404,500
     * @param req
     * @param resp
     * @param e
     * @return
     * @throws Exception
     */
    @ExceptionHandler(value = Exception.class)    @ResponseBody
    public ResponseData defaultErrorHandler(HttpServletRequest req, Exception e) throws Exception {
        logger.error("", e);
        ResponseData r = new ResponseData();
        r.setMessage(e.getMessage());        if (e instanceof org.springframework.web.servlet.NoHandlerFoundException) {
             r.setCode(404);
        } else {
             r.setCode(500);
        }
        r.setData(null);
        r.setStatus(false);        return r;
    }
}

ResponseData는 포맷을 반환하는 엔티티 클래스입니다.
이런 것은 오류가 발생했을 때 이쪽에서 포착된 다음에 되돌아오는 형식을 봉하여 호출자에게 되돌려준다
마지막 단계는 스프링 부트의 구성 파일에 다음 구성을 추가하는 것입니다.
#     ,       spring.mvc.throw-exception-if-no-handler-found=true#                 spring.resources.add-mappings=false

그리고 우리가 존재하지 않는 인터페이스를 호출할 때, 되돌아오는 오류 정보는 바로 우리가 정의한 형식이다
{  "status": false,  "code": 404,  "message": "No handler found for GET /rest11/auth",  "data": null}

좋은 웹페이지 즐겨찾기