当前位置: 首页 > 知识库问答 >
问题:

如何在Spring WebClient中验证响应对象

袁恩
2023-03-14

我正在使用Springs的Webclient进行HTTP GET调用。

我如何验证响应对象的属性,我收到作为我的HTTP调用的响应。

我试图通过阻止响应对象来验证平板地图中的出生日期,但这看起来不是最有效的方法。

以下是我代码的摘录。

private Mono<GetPersonBasicInfoResWrapper> getPersonBasicInfo(Double personId, LocalDate birthDate,
            CallerRequestMetaData callerInfo) {
        return middlewareWebClient
                .get()
                .uri(...)
                ...
                ...
                .exchange()
                .flatMap(client -> {
                    GetPersonBasicInfoResWrapper block = client.bodyToMono(GetPersonBasicInfoResWrapper.class).block();
                    LocalDate personBirthDate = LocalDateTime.ofInstant(block.getBirthDate().toInstant(),ZoneId.of(Constants.DEFAULT_TIME_ZOME)).toLocalDate();
                    if (!personBirthDate.equals(birthDate)) { 
                        throw new YakeenRowadException(Errors.INCORRECT_ID_BIRTH_DATE_G, birthDate.toString()); 
                    } else
                        return client.bodyToMono(GetPersonBasicInfoResWrapper.class);
                });
}

任何帮助都非常感谢。

共有1个答案

宓茂才
2023-03-14

试试这样的东西

private Mono<PersonInfo> getPersonInfo(Double personId) {
    return webClient.get()
            .uri(...)
            .exchange()
            .flatMap(response -> {
                return response.bodyToMono(PersonInfo.class);
            });
}

private LocalDate toLocalDate(Instant instant) {
    return LocalDateTime.ofInstant(instant, ZoneId.of(Constants.DEFAULT_TIME_ZOME))
                        .toLocalDate();
}

public Mono<PersonInfo> doSomething(Double personId, LocalDate birthDate) {
    return getPersonInfo(personId)
             .flatMap(personInfo -> {
                final LocalDate birthDate = toLocalDate(personInfo.getBirthDate().toInstant());
                if (!personBirthDate.equals(birthDate)) { 
                    return Mono.error(new YakeenRowadException(Errors.INCORRECT_ID_BIRTH_DATE_G, birthDate.toString()));
                }
                return Mono.just(personInfo);
            });
}

在获取期间不进行验证,验证是业务逻辑,应该在上面的层中。

  1. 您取回并返回
  2. 你验证
  3. 如果验证失败,则返回Mono。错误()发送到调用客户端

我不知道“元数据”应该是什么。我希望不是url,因为那样传递是错误的。

(尽量避免冗长的命名)

 类似资料:
  • 我用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 或超时或其他时 - 记录错误消息。日志应该在后台创建(而不是由创建调用的线程创建)但是每次都会执行,工作正常,但也有 记录在日志文件中。 我也在一些教程中看到过方法,但在我的设置中有这样的方法。 如何记录成功和失败消息?

  • 我得到的是HTML格式的endpoint响应,我需要验证标记中的某些json。HTML响应如下所示: 我想在json响应中验证以下内容: 和 如何实现?

  • 在react中验证道具的当前首选方法是什么? 现在我正在使用: 然而,这现在不符合禁止支柱类型棉绒规则。我应该使用还是有更好的方法?

  • 因此,应用程序流程如下: Spring应用程序接收请求- 这是我正在使用的网络客户端(副本): 现在我不想通过控制器将此Mono对象直接返回到客户端(如Angular应用程序),因为这是一个中间步骤。我想对从 WebClient 收到的响应运行一些验证。 我已经试过<代码>。block()方法来检索函数,但是按照反应式编程,这似乎是一种不好的做法。(阻塞操作)此外,我无法理解如何使用<代码>。su