Spring WebFlux-处理404的单一方法?

时间:2018-10-07 13:03:57

标签: java spring spring-webflux

在WebFlux中的第一步,我有几个RestController类,它们公开GET API以通过ID从服务器检索资源,例如:

@GetMapping("{id}")
public Mono<Customer> findById( @PathVariable int id )
{
    return Mono.justOrEmpty( service.getById( id ) );
}

假设在找不到请求的ID的情况下,service.getById()返回NULL,如何将其转换为带有一些自定义消息的HTTP代码404?

1 个答案:

答案 0 :(得分:1)

一种方法是将客户包装在ResponseEntity中, 我假设您的服务返回的是Mono ..如果没有包装在Mono.fromCallable(() -> service.getById())

e.g. 
    @GetMapping("/{id}", produces = MediaType.APPLICATION_JSON_VALUE)
    public Mono<ResponseEnity<?>> findById( @PathVariable int id )
    {
        return service.getById(id)
                .map(customer -> ResponseEntity.ok(customer))
                .switchIfEmpty(Mono.just(new ResponseEntity<>("{\"content\":\"false\"}", HttpStatus.NOT_FOUND));
    }