我已经在SpringBoot中创建了一个自定义异常处理程序

@RestControllerAdvice
public class DataApiExceptionHandler extends ResponseEntityExceptionHandler {
 @ExceptionHandler(NoSuchElementException.class)
        public final void **handleNoSuchElementException**(NoSuchElementException ex) {
            System.err.println("This is throwing :"+ex.getMessage());
        }
...
@ExceptionHandler({ Exception.class })
    public ResponseEntity<Object> **handleAll**(final Exception ex) {
...



抛出像

throw new NoSuchElementException("SomelogicalDescription");


但是每次我抛出此NoSuchElementException时,都会执行handleAll而不是handleNoSuchElementException。

我可能会错过一些非常琐碎的东西。帮助我找出答案。

***To change NoSuchElementException with NotFoundException does not make any difference.***

最佳答案

看来您并没有理解@RestControllerAdvice活动。


注意:如果配置了适当的HandlerMapping-HandlerAdapter对,例如RequestMappingHandlerMapping-RequestMappingHandlerAdapter对,则@RestControllerAdvice将被处理,这是MVC Java配置和MVC名称空间中的默认值。 RestControllerAdvice


请改用@ControllerAdvice
ControllerAdvice

您有一个void处理程序-那么为什么要期待响应?

你在那里重奏什么?就像这样:

@ControllerAdvice
public class InvalidValuesExceptionHandler extends ResponseEntityExceptionHandler {

  @ExceptionHandler({ InvalidValuesException.class })
  protected ResponseEntity<Object> handleInvalidRequest(RuntimeException exc, WebRequest request) {
    InvalidValuesException ive = (InvalidValuesException) exc;

    HttpHeaders headers = new HttpHeaders();
    headers.setContentType(MediaType.APPLICATION_JSON_UTF8);

    BasicResultMessage msg = new BasicResultMessage(ive.getDataId(),
                                                    ive.getMessage());
    SendDataResult result = new SendDataResult(false, msg);

    return handleExceptionInternal(exc, result, headers, HttpStatus.BAD_REQUEST, request);
  }
}

关于java - SpringBoot中的NoSuchElementException @ExceptionHandler无法正常工作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59945018/

10-09 16:57