spring Sping Boot 中的NoSuchElementException @异常处理程序不工作[重复]

7cjasjjr  于 2023-02-21  发布在  Spring
关注(0)|答案(1)|浏览(124)
    • 此问题在此处已有答案**:

Order of @ExceptionHandler(3个答案)
6天前关闭。
我在Spring Boot中创建了一个自定义异常处理程序:

@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。
我可能遗漏了一些非常微不足道的东西。用NotFoundException更改NoSuchElementException没有任何区别。

m1m5dgzv

m1m5dgzv1#

您似乎不理解@RestControllerAdvice活动:
注意:如果配置了适当的HandlerMapping-HandlerAdapter对(例如MVC Java配置和MVC命名空间中的默认值RequestMappingHandlerMapping-RequestMappingHandlerAdapter对),则会处理@RestControllerAdvice。RestControllerAdvice
请改用@ControllerAdviceControllerAdvice
您有一个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);
  }
}

相关问题