找不到项目时如何 return 自定义错误响应
How to return custom Error Response when item not found
正在尝试在未找到项目时发送自定义错误消息。 ifNotNull
大小写正确生成所需的响应。但是 ifNull
没有生成所需的响应(响应始终为空,状态代码为 200)
AuthorService.java
public Uni<Author> findByName(String name) {
return authorRepo.findByName(name);
}
Resource.java
@GET
@Path("/{name}")
public Uni<Response> get(@PathParam("name") String name) {
return authorService.findByName(name)
.onItem().ifNotNull().transform(t -> new ResponseBodyDTO("success", true, t))
.onItem().transform(t -> Response.ok(t).build())
.onItem().ifNull().switchTo(() -> Uni.createFrom().item(new ResponseBodyDTO("fail", false, null))
.onItem().transform(t -> Response.status(Response.Status.NOT_FOUND).entity(t).build()));
}
使用以下内容
@GET
@Path("/{name}")
public Uni<Response> get(@PathParam("name") String name) {
return authorService.findByName(name)
.onItem().ifNotNull().transform(t -> Response.ok(new ResponseBodyDTO("success", true, t)).build())
.onItem().ifNull().continueWith(Response.status(Response.Status.NOT_FOUND).entity(new ResponseBodyDTO("fail", false, null)).build())
}
正在尝试在未找到项目时发送自定义错误消息。 ifNotNull
大小写正确生成所需的响应。但是 ifNull
没有生成所需的响应(响应始终为空,状态代码为 200)
AuthorService.java
public Uni<Author> findByName(String name) {
return authorRepo.findByName(name);
}
Resource.java
@GET
@Path("/{name}")
public Uni<Response> get(@PathParam("name") String name) {
return authorService.findByName(name)
.onItem().ifNotNull().transform(t -> new ResponseBodyDTO("success", true, t))
.onItem().transform(t -> Response.ok(t).build())
.onItem().ifNull().switchTo(() -> Uni.createFrom().item(new ResponseBodyDTO("fail", false, null))
.onItem().transform(t -> Response.status(Response.Status.NOT_FOUND).entity(t).build()));
}
使用以下内容
@GET
@Path("/{name}")
public Uni<Response> get(@PathParam("name") String name) {
return authorService.findByName(name)
.onItem().ifNotNull().transform(t -> Response.ok(new ResponseBodyDTO("success", true, t)).build())
.onItem().ifNull().continueWith(Response.status(Response.Status.NOT_FOUND).entity(new ResponseBodyDTO("fail", false, null)).build())
}