@ExceptionHandler (Exception.class) не обрабатывает все типы исключений - PullRequest
0 голосов
/ 06 июня 2018

Я пытаюсь обработать все типы исключений, используя @ExceptionHandler(Exception.class).Но это не обрабатывает все типы исключений.

Когда я пытаюсь получить доступ к неправильному методу HTTP от почтальона / браузера, я не получаю никакого ответа, появляется пустая страница.

Может ли кто-нибудь сказать мне, почему я не получаю никакого ответа илискажите, если я делаю что-то не так в своем коде?

Ответы [ 3 ]

0 голосов
/ 06 июня 2018

Или переопределить ResponseEntityExceptionHandler#handleExceptionInternal() или не расширять ResponseEntityExceptionHandler.

@Order(Ordered.HIGHEST_PRECEDENCE) на @ControllerAdvice должно работать до того, как ResponseEntityExceptionHandler будет вызываться согласно этому ответу , которыйпредполагает, что Spring Framework 4.3.7 необходим.

0 голосов
/ 06 июня 2018

Используя RequestMapping, вы можете создавать разные ответы для каждого кода Http.В этом примере я показываю, как управлять ошибками и дать соответствующий ответ.

Это RestController со спецификацией службы

@RestController
public class User {

    @RequestMapping(value="/myapp/user/{id}", method = RequestMethod.GET)
    public ResponseEntity<String> getId(@PathVariable int id){

        if(id>10)
            throw new UserNotFoundException("User not found");

        return ResponseEntity.ok("" + id);
    }

    @ExceptionHandler({UserNotFoundException.class})
    public ResponseEntity<ErrorResponse> notFound(UserNotFoundException ex){

        return new ResponseEntity<ErrorResponse>(
            new ErrorResponse(ex.getMessage(), 404, "The user was not found") , HttpStatus.NOT_FOUND);
    }
}

В методе getId есть небольшая логика, еслиcustomerId <10 Должен отвечать на идентификатор клиента как часть основного сообщения, но должно быть выброшено исключение, когда клиент больше 10, в этом случае служба должна ответить ErrorResponse. </p>

public class ErrorResponse {

    private String message;
    private int code;
    private String moreInfo;

    public ErrorResponse(String message, int code, String moreInfo) {
        super();
        this.message = message;
        this.code = code;
        this.moreInfo = moreInfo;
    }

    public String getMessage() {

        return message;
    }

    public int getCode() {

        return code;
    }

    public String getMoreInfo() {

        return moreInfo;
    }
}

И, наконец,Я использую определенное исключение для ошибки "Not Found"

public class UserNotFoundException extends RuntimeException {

    public UserNotFoundException(String message) {
        super(message);
    }
}
0 голосов
/ 06 июня 2018

Это обработает исключения, возникшие из метода контроллера.

Если вы отправите запрос, для которого нет отображения, метод контроллера вообще не будет вызван, поэтому @ExceptionHandler будет устаревшим вэтот случай.

Может быть, эта статья о создании пользовательских обработчиков может помочь: article

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...