From f4cf2cd0e07ddb229d7f802e3957d2f6b6c51cdb Mon Sep 17 00:00:00 2001 From: "calvin.xiao" Date: Thu, 12 Nov 2015 08:46:25 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=B9=E8=BF=9B=E5=BC=82=E5=B8=B8=E5=A4=84?= =?UTF-8?q?=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...ndler.java => CustomExceptionHandler.java} | 21 +++++++++++++++---- .../bootapi/service/exception/ErrorCode.java | 2 +- .../bootapi/functional/BookEndpointTest.java | 2 +- 3 files changed, 19 insertions(+), 6 deletions(-) rename examples/boot-api/src/main/java/org/springside/examples/bootapi/api/support/{ServiceExceptionHandler.java => CustomExceptionHandler.java} (52%) diff --git a/examples/boot-api/src/main/java/org/springside/examples/bootapi/api/support/ServiceExceptionHandler.java b/examples/boot-api/src/main/java/org/springside/examples/bootapi/api/support/CustomExceptionHandler.java similarity index 52% rename from examples/boot-api/src/main/java/org/springside/examples/bootapi/api/support/ServiceExceptionHandler.java rename to examples/boot-api/src/main/java/org/springside/examples/bootapi/api/support/CustomExceptionHandler.java index 0b851470..e8fa60d3 100644 --- a/examples/boot-api/src/main/java/org/springside/examples/bootapi/api/support/ServiceExceptionHandler.java +++ b/examples/boot-api/src/main/java/org/springside/examples/bootapi/api/support/CustomExceptionHandler.java @@ -8,22 +8,35 @@ import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.RestController; import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler; +import org.springside.examples.bootapi.service.exception.ErrorCode; import org.springside.examples.bootapi.service.exception.ServiceException; import org.springside.modules.web.MediaTypes; -@ControllerAdvice -public class ServiceExceptionHandler extends ResponseEntityExceptionHandler { +@ControllerAdvice(annotations = { RestController.class }) +public class CustomExceptionHandler extends ResponseEntityExceptionHandler { @ExceptionHandler(value = { ServiceException.class }) - public final ResponseEntity handleException(ServiceException ex, HttpServletRequest request) { + public final ResponseEntity handleServiceException(ServiceException ex, HttpServletRequest request) { // 注入servletRequest,用于出错时打印请求来源地址 logger.error(ex.getMessage() + ", request from " + request.getRemoteAddr(), ex); HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.parseMediaType(MediaTypes.JSON_UTF_8)); ErrorResult result = new ErrorResult(ex.code.code, ex.getMessage()); - return new ResponseEntity(result, headers, HttpStatus.valueOf(ex.code.httpStatus)); + return new ResponseEntity(result, headers, HttpStatus.valueOf(ex.code.httpStatus)); + } + + @ExceptionHandler(value = { Exception.class }) + public final ResponseEntity handleGeneralException(Exception ex, HttpServletRequest request) { + // 注入servletRequest,用于出错时打印请求来源地址 + logger.error(ex.getMessage() + ", request from " + request.getRemoteAddr(), ex); + + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.parseMediaType(MediaTypes.JSON_UTF_8)); + ErrorResult result = new ErrorResult(ErrorCode.INTERNAL_SERVER_ERROR.code, "Internal Server Error"); + return new ResponseEntity(result, headers, HttpStatus.INTERNAL_SERVER_ERROR); } public static class ErrorResult { diff --git a/examples/boot-api/src/main/java/org/springside/examples/bootapi/service/exception/ErrorCode.java b/examples/boot-api/src/main/java/org/springside/examples/bootapi/service/exception/ErrorCode.java index 43b1ffa1..3f25a0c5 100644 --- a/examples/boot-api/src/main/java/org/springside/examples/bootapi/service/exception/ErrorCode.java +++ b/examples/boot-api/src/main/java/org/springside/examples/bootapi/service/exception/ErrorCode.java @@ -2,7 +2,7 @@ package org.springside.examples.bootapi.service.exception; public enum ErrorCode { - BAD_REQUEST(1000, 400), UNAUTHORIZED(1001, 401), FORBIDDEN(1002, 403), + BAD_REQUEST(400, 400), UNAUTHORIZED(401, 401), FORBIDDEN(403, 403), INTERNAL_SERVER_ERROR(500, 500), BOOK_STATUS_WRONG(1100, 400), BOOK_OWNERSHIP_WRONG(1101, 403), NO_TOKEN(1102, 401); diff --git a/examples/boot-api/src/test/java/org/springside/examples/bootapi/functional/BookEndpointTest.java b/examples/boot-api/src/test/java/org/springside/examples/bootapi/functional/BookEndpointTest.java index c2f09736..0285d45e 100644 --- a/examples/boot-api/src/test/java/org/springside/examples/bootapi/functional/BookEndpointTest.java +++ b/examples/boot-api/src/test/java/org/springside/examples/bootapi/functional/BookEndpointTest.java @@ -32,7 +32,7 @@ import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.web.client.RestTemplate; import org.springside.examples.bootapi.BootApiApplication; -import org.springside.examples.bootapi.api.support.ServiceExceptionHandler.ErrorResult; +import org.springside.examples.bootapi.api.support.CustomExceptionHandler.ErrorResult; import org.springside.examples.bootapi.domain.Book; import org.springside.examples.bootapi.dto.BookDto; import org.springside.examples.bootapi.repository.BookDao;