当前位置: 首页 > 知识库问答 >
问题:

未引发spring的自定义异常

蓝星辰
2023-03-14

我用Spring5反应式编写了一个自定义异常

@ResponseStatus(value = HttpStatus.NOT_FOUND)
public class AddressNotFoundException extends RuntimeException{
    public AddressNotFoundException(String message) {
        super(message);
    }

我把这个叫做服务:

@Override
public Mono<Address> getById(String id) {
    Address addressFound=repository.findById(id).block();
    if(Objects.equals(addressFound, null))
        throw new AddressNotFoundException("Address #"+id+" not found");
    return Mono.just

(addressFound);
    }

但是当我到达这个页面时,会抛出一个异常,但它不是404,而是一个空指针异常和一个错误500页面,但有正确的消息?

AddressNotFound永远不会抛出,只有Nullpointer异常,但会抛出我的自定义消息???你能帮帮我吗?

这是我的控制器:

  @GetMapping("/address/{id}")
    public Mono<Address> byId(@PathVariable String id) {
        return addressService.getById(id);
    }

谢谢

共有3个答案

岳涵煦
2023-03-14

您可能有一个HandlerExceptionResolver bean,由于某种原因导致了500。请试着把它脱下来一会儿。

容学林
2023-03-14

不要扩展RuntimeException,而要尝试只扩展泛型异常。

Spring提供了一个ControllerAdvice注释来拦截抛出的异常

@ControllerAdvice
public class ExceptionController extends ResponseEntityExceptionHandler {
  @ExceptionHandler(value = { AddressNotFoundException.class })
  protected ResponseEntity<Object> handleAddressNotFoundException(Exception ex, WebRequest request) {
    AddressNotFoundException notFound = (AddressNotFoundException)ex;
    return handleExceptionInternal(ex, String.valueOf(notFound), new HttpHeaders(), HttpStatus.NOT_FOUND, request);
  }

}

这将以404的形式将错误发送回客户端,在404中,您可以在客户端进行摘要,以通常以json字符串的形式显示给用户。可以重写exceptionstoString方法以json的形式返回它,也可以编写一个助手方法来实现这一点。

国跃
2023-03-14

如果您的地址为空,

存储库。findById(id)。block();

我想应该抛出NullPointerException。这样,它就永远无法到达代码行来抛出自定义异常。

 类似资料:
  • 我使用的是SpringBoot2.3。我遇到了一些例外情况。我想使用类在全局级别捕获异常。我能够捕获验证错误并返回自定义错误响应,但Spring似乎忽略了我的方法。这是我的课程: andler.java 下面是我抛出异常的方法: PhotoStorageServiceImp.java PhotoUploadController.java } 我在检索照片时遇到错误

  • 我正试图自己解决参数问题。 我可以很容易地从NativeWebRequest获取输入参数,并将它们分派到相应的自定义@Param注释参数中。 问题是我还想在这方面做一些语法检查/验证。但如果我在“resolveArgument”中抛出异常,则会向用户显示完整的堆栈跟踪。这将是过度和不安全的。我只想向用户返回一条JSON格式的消息,以显示哪个输入参数语法有错误。

  • 我对Java/Spring领域相当陌生,我正在尝试在我的Spring Boot应用程序中使用@ControllerAdvise。ControllerAdvision捕获异常,但不显示我的自定义响应。 下面是引发异常的RestController的快照 以下是@ControllerAdvice

  • 我是Spring Security的新手。 我有一段代码,我检查是否在请求中传递了授权头,如果缺少,我抛出一个异常。 我的目标是在全球范围内处理所有异常,因此我使用@ControllerAdvice。 注意:我知道@ControllerAdvice对于从这个和这个抛出的控制器之外的异常不起作用,所以我也遵循了这些链接中的建议。 重新验证入口点。Java语言 这是我配置authenticationE

  • 我是Spring Boot的新手,但在阅读了Spring Boot REST中关于异常handlig的帖子和博客几个小时之后,我决定在这里写一些关于如何处理自定义转换器抛出的异常的文章。 我开发了一个基于Spring Boot的小型REST应用程序,简单地从IntelliJ生成。示例性方法如下所示 使用、和的所有类型的处理异常,我无法捕获控制器中转换器的异常,从而将json错误响应原始字段的“st

  • 我有一个注释表和用户表,其关系为:user- 我的其他模型没有任何问题与Has很多关系,然而,评论模型有一个问题,我尝试的每一件事(即使我使用Has很多只是为了看看它是否会有不同的错误)。 下面是注释模型。 以下是用户表: 这是评论表 最后,当我调用$comment时- 谢谢