Пользовательское исключение при загрузке Spring не печатается в журналах - PullRequest
0 голосов
/ 09 января 2019

Я пытаюсь реализовать пользовательское исключение для моего проекта REST загрузки Spring. Пользовательское исключение вызывается, но не влияет на способ отображения сообщения об ошибке.

Это POJO, который я использую для своих пользовательских ошибок:

public class ApiError {
    private HttpStatus status;
    private String message;
    private List<String> errors;

    public ApiError(HttpStatus status, String message, List<String> errors) {
        super();
        this.status = status;
        this.message = message;
        this.errors = errors;
    }

    public ApiError(HttpStatus status, String message, String error) {
        super();
        this.status = status;
        this.message = message;
        errors = Arrays.asList(error);
    }
}

Это обработчик исключений, который я написал:

@ControllerAdvice
@EnableWebMvc
public class ApiExceptionHandler extends ResponseEntityExceptionHandler {

    @ExceptionHandler(Exception.class)
    public final ResponseEntity<Object> handleAllExceptions(Exception ex, WebRequest request) {
        System.out.println("Custom exception!!");
        //List<String> details = new ArrayList<>();
        //details.add(ex.getLocalizedMessage());
        //System.out.println("Localize message:: "+ex.getLocalizedMessage());
        // ExceptionResponse exceptionResponse = new ExceptionResponse(new Date(), ex.getMessage(),

        //request.getDescription(false));
        ApiError error = new ApiError(HttpStatus.INTERNAL_SERVER_ERROR,"Server Error", request.getDescription(false));
        return new ResponseEntity<Object>(error, HttpStatus.INTERNAL_SERVER_ERROR);
    }
}

Кроме того, в моем контроллере определен следующий метод:

@RequestMapping(value = "/model", params = "number", method = RequestMethod.GET, produces = "application/json")
List<Model> getModel(HttpServletRequest request,@RequestParam(value = "codeNumber") String number) throws Exception{

    List<Model> model = null;
    try {
        model = niiService.getModel(number);
    }catch(RuntimeException e){
        new Exception(e);
    }
    return model;
}

Однако вместо моего пользовательского POJO я вижу следующее исключение:

{
    "timestamp": 1547013989124,
    "status": 500,
    "error": "Internal Server Error",
    "message": "Request processing failed; nested exception is org.springframework.transaction.CannotCreateTransactionException: Could not open JDBC Connection for transaction; nested exception is com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure\n\nThe last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.",
    "path": "/model"
}

Вместо этого я ожидал следующую структуру JSON:

{
    "status": 500,
    "message": "Server Error"
    ..
}

Пожалуйста, дайте мне знать, что мне не хватает, чтобы получить ответ об ошибке так, как я хотел.

Ответы [ 2 ]

0 голосов
/ 09 января 2019

Я пропустил добавление getter и setter в класс APIError. Следовательно, ответ был не таким, как я ожидал.

0 голосов
/ 09 января 2019

Вы пропускаете throw перед пользовательским исключением. Также убедитесь, что вы ловите правильное исключение внутри вашего контроллера.

Изменение

catch (RuntimeException e) {
   //custom exception
    new Exception(e);
} 

К

catch (RuntimeException e) {
    //custom exception
    throw new Exception(e);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...