我正在使用Springs's Webclient进行HTTP GET调用。
如何验证作为HTTP调用的响应而收到的响应对象GetPersonBasicInfoResWrapper
的属性。
我正在尝试通过阻止响应对象来验证birthDate
内部的flatMap
,但它看起来并不是最实用的方法。
以下是我的代码摘录。
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);
});
}
非常感谢您的帮助。
尝试这样的事情
private Mono<PersonInfo> getPersonInfo(Double personId) {
return webClient.get()
.uri(...)
.exchange()
.flatMap(response -> {
return response.bodyToMono(PersonInfo.class);
});
}
private 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);
});
}
不要在获取过程中进行验证,验证是业务逻辑,应该在上面的层中。
我不知道“元数据”应该是什么。我希望它不是url,因为这样传递是错误的。
(而且我缩短了您的所有命名,他们疯了很长时间)