因此,应用程序流程如下:
这是我正在使用的网络客户端(副本):
public Mono<Details> someRestCall(String name) {
return this.webClient.get().url("/{id}/details", name)
.retrieve().bodyToMono(Details.class);
}
现在我不想通过控制器将此Mono对象直接返回到客户端(如Angular应用程序),因为这是一个中间步骤。我想对从 WebClient 收到的响应运行一些验证。
我已经试过<代码>。block()方法来检索函数,但是按照反应式编程,这似乎是一种不好的做法。(阻塞操作)此外,我无法理解如何使用<代码>。subscribe()方法来检索响应对象,并对其运行验证/检查,如果验证通过,则返回< code>True。
简单地说,我想返回一个普通的布尔值/Java对象,而不是从模块/验证代码返回一个Mono对象。
我是反应式编程的新手,有人能帮我解决这个问题吗?
只需稍加努力,您就可以对WebClient调用返回的POJO使用基于JSR-303注释的验证。这是一个最小的示例:
@Component
public class MyClass {
final Validator validator;
MyClass(Validator validator) {
this.validator = validator;
}
<T> T validate(T obj) {
Set<ConstraintViolation<T>> violations = this.validator.validate(obj);
if (violations.size() > 0) {
throw new ResponseStatusException(INTERNAL_SERVER_ERROR, violations.toString());
}
return obj;
}
public Mono<Details> someRestCall(String name) {
return this.webClient.get()
.url("/{id}/details", name)
.retrieve()
.bodyToMono(Details.class)
.doOnNext(this::validate);
}
}
在实践中,您可能需要一个格式更好的冲突字符串,如果在几个位置完成验证,则可以将该逻辑提升到其自己的类中。
我用Spring Boot Rest实现了控制器: DTO回应道: 未验证响应正文。我已经用< code>@Valid对其进行了注释,但是< code>null值仍然通过。请求验证工作良好。 如何验证响应正文?
在使用空手道框架进行API测试时,我在验证嵌套JSON响应时遇到了一些问题。 JSON响应: null def feed_cycle={item_type:'#string',title:'#string'} def feed_college_dept_branch={branch:'#string'} def feed_college={item_type:'#string',dept:'[]f
我正在尝试使用Web客户端创建REST调用 我只想记录通话结果。成功时 - 使用响应正文记录成功消息,在 5XX 或超时或其他时 - 记录错误消息。日志应该在后台创建(而不是由创建调用的线程创建)但是每次都会执行,工作正常,但也有 记录在日志文件中。 我也在一些教程中看到过方法,但在我的设置中有这样的方法。 如何记录成功和失败消息?
问题内容: 尝试进行某些路由需要身份验证。 我有这个: 注意:是的,身份验证服务可以正常工作。 对于每条路由,我都会检查用户是否已通过身份验证,如果没有通过身份验证,则要将他们重定向到登录页面,如果已通过身份验证,则它将以“ /”路由登陆到第一页。 我得到的是: 我在哪里做错了? 问题答案: 一个简单的解决方案是制作一个包含所有受保护路线的(高阶组件)。 根据您的应用程序的嵌套方式,您可能需要利用
我正试图决定如何处理猫鼬中的验证错误。 我使用节点验证器定义了自己的验证规则,例如: 这将产生如下错误: 然而,节点验证器提供了自己的错误消息。如果我使用mongoose validator节点模块将节点验证器直接插入到我的模式中,那么我可以直接使用这些错误消息: 这将生成一条错误消息,如下所示: 我也可以在此处提供自定义错误消息: Mongoose允许您根据需要定义字段: 这将生成一条错误消息,
如何在处理正文请求之前验证身份验证? 我正在使用vertx: 我想在处理正文请求之前验证身份验证。但我得到了错误的java。lang.IllegalStateException:请求已被读取 使用暂停功能上的延迟复制: 当运行delay(100)时(这是验证过程的示例),我得到了上面的错误。如果我对延迟(100)进行注释,它可以正常工作。