java - 假装客户端响应验证

标签 java spring validation annotations feign

我有两个应用程序 A 和 B 使用 FeignClient 相互通信。 作为应用程序 A,我希望对应用程序 B 返回的数据进行验证。如果我想验证请求参数,我可以轻松使用 @Valid 注释并使用正确的 spring 验证注释来注释对象。响应怎么样?

@FeignClient()
public interface AccountClient {
   @PostMapping("/accounts/account/create")
   void createAccount(@Valid CreateAccountRequest request);

   @PostMapping("/accounts/account/get")
   AccountResponse getAccount(AccountRequest request);

}
public classs AccountResponse {
   @NotNull
   public String status;
}

以代码为例。我可以轻松地验证应用程序 B 中的 CreateAccountRequest。但是 AccountResponse 呢?在这种情况下,@NotNull 不起作用。我宁愿避免获得响应并手动检查 status != null 因为我会有更多这样的字段。

最佳答案

在这种情况下,如果将 @Validated 放置到 AccountClient 接口(interface)上,然后将 @Valid 放置到 getAccount 上,响应验证应该起作用 方法。

这是标准的 Spring 验证功能,不仅适用于 Feign

import org.springframework.validation.annotation.Validated;
import javax.validation.Valid;

@Validated
@FeignClient
public interface AccountClient {
   @PostMapping("/accounts/account/create")
   void createAccount(@Valid CreateAccountRequest request);

   @Valid
   @PostMapping("/accounts/account/get")
   AccountResponse getAccount(AccountRequest request);

}

关于java - 假装客户端响应验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59898096/

相关文章:

java - 自动隐藏任务栏和最大屏幕空间

java - Spring AOP代理使用

c# - 必填字段验证器,在初始页面加载时显示

java - 如何将 Java 8 安装到 Google Compute Debian 8 实例上?

java - j2me和ksoap如何获取asp.net webservice中的特定元素

java - 找不到 hibernate.cfg.xml (该文件实际上不存在)。配置位于dispatcher-servlet中

ruby-on-rails - 如何在 ruby​​-on-rails 中为 3 位数字编写验证?

javascript - 如何使用 moment 测试字符串是否有效?

java - Selenium 定义要在多测试中共享的常量变量

java - 在 IntelliJ 中添加 Spring 框架支持 - 没有这样的选项