【问题标题】:Throw exception spring boot webflux抛出异常spring boot webflux
【发布时间】:2019-09-19 04:57:21
【问题描述】:

我正在尝试创建一个条件,如果不满足,则抛出异常。但是我尝试了很多方法,但都没有成功。

我的休息控制器:

@GetMapping(value = ["/{id}"])
    fun find(@PathVariable id: String): Mono<ResponseEntity<Mono<Person>>> {
        return ResponseEntity.ok().body(service.find(id)).toMono()
}

我的服务

override fun find(id: String): Mono<Person> {
        return repository.findById(id).doOnError { throw DataNotFound("Person not found")}
  }

如果我输入一个现有的 ID,它会返回一个注册人。 但是,如果我输入一个不存在的 ID,而不是抛出异常,它会返回一个 200 和空正文。

我该如何解决这个问题?有人可以帮忙吗?

【问题讨论】:

    标签: spring-boot exception kotlin spring-webflux


    【解决方案1】:

    试试这个:

    @GetMapping(value = ["/{id}"])
    fun find(@PathVariable id: String): Mono<ResponseEntity<?>> {
      service.find(id).map(person -> ResponseEntity.ok().body(person))
        .onErrorResume(DataNotFound.class, exception -> ResponseEntity.notFound())
    }
    
    fun find(id: String): Mono<Person> {
      repository.findById(id).onErrorMap(error -> new DataNotFound("Person not found"))
    }
    

    如果有人存在则返回 OK 响应,否则返回 NOT_FOUND。

    【讨论】:

      【解决方案2】:

      通常,在更复杂的场景中,您希望将异常从异常转换为某种错误资源。

      在这种情况下,您将为处理 HTTP 请求的方法使用相同的响应类型。更准确地说,在您的情况下:

      @GetMapping(value = ["/{id}"])
      fun find(@PathVariable id: String): Mono<ResponseEntity<Mono<Person>>> {
          return ResponseEntity.ok().body(service.find(id)).toMono()
      }
      

      (这将保持原样!)

      接下来,您将提供一个所谓的ControllerAdvice,在您的情况下,它可能类似于以下 sn-p:

      @ControllerAdvice(assignableTypes = [YourRestController::class]
      class ControllerAdvice {
      
         @ExceptionHandler
         fun handle(ex: DataNotFoundException): ResponseEntity<DataNotFoundErrorResource> {
            return ResponseEntity.status(HttpStatus.NOT_FOUND).body(DataNotFoundErrorResource.from(ex)
         }
      }
      

      注意:请注意,我没有使用 Kotlin 编译器,但我已经在脑海中编译了它:)我希望它会没事的!

      【讨论】:

        猜你喜欢
        • 2021-11-09
        • 2016-09-26
        • 2021-03-11
        • 2020-02-05
        • 1970-01-01
        • 1970-01-01
        • 2019-01-24
        • 2018-12-30
        • 2018-06-22
        相关资源
        最近更新 更多