提问人:dxgamer2001 提问时间:10/10/2023 更新时间:10/10/2023 访问量:30
Java Spring Reactive 将错误消息返回给用户 OR 某些对象的 json
Java Spring Reactive return error message to user OR json of some Object
问:
我的第一个问题,所以如果我错过了什么,请理解。
所以我需要做一些类似于这张图片的事情(但可以工作):
@GetMapping("/search")
public Mono<ResponseEntity<?>> findProduct(@RequestBody ProductSearch productSearch) {
return findProduct2(productSearch)
.map(products -> new ResponseEntity<>(products, HttpStatus.OK))
.onErrorResume(IllegalArgumentException.class, error -> new ResponseEntity<>(error, HttpStatus.BAD_REQUEST));
}
在这里,我尝试将 Mono<List> 发回给用户,如果他通过了其他一些验证并且没有错误处理请求。但我还想向用户返回一个 400 和一条消息,说明为什么它没有通过验证(消息将是一个字符串)。 我无法克服的错误是类型检查。
这似乎是一项相当简单的任务,因为 HTTP 并不关心它是否接收对象/字符串(也许只是在它的 MediaType 意义上)。
我已经对此进行了相当多的研究,我只找到了一个有点合适的答案(尽管尝试了其他答案),那就是将spring的“server.error.include-message”设置更改为“onparam”或“always”,但我不想在这里。主要是因为如果发生一些未知错误,它可能会将堆栈跟踪泄露给用户,但还有其他原因。
另一个方法是创建一个类似于这样的对象:
public class ReturnType {
private List<ProductEntity>> result;
private String errorMessage;
}
并返回它,但我在一个团队中工作,所以这将是一个更复杂的解决方案,而不是我想要的。
我再次强调,我知道这些都是解决方案,但对于这么简单的问题,我不明白为什么没有更好的解决方案。
提前感谢任何帮助我的人!
答:
0赞
dxgamer2001
10/10/2023
#1
对于任何有同样疑问的人。
尝试更改 GetMapping 注释:
@GetMapping(value="/search", produces={"application/json","text/html"}, consumes="application/json")
我认为这是不言自明的,但这可以返回 2 种类型的 HTTP mediaTypes,而不是只返回一种,这就是问题所在。
评论