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

假装客户端编译失败,它将BindingResult作为第二个主体参数处理

罗昊明
2023-03-14

我正在学习使用Spring的Feign客户端,因此我构建了两个简单的项目(serviceA和serviceB)来测试它。我有以下代码:

@RequestMapping("/users")
public interface UserRest {
    @PostMapping
    public ResponseEntity<User> createUser(@Valid @RequestBody User user, BindingResult br);
}
@RestController
public class UserController implements UserRest {
    @Override
    @PostMapping
    public ResponseEntity<User> createUser(@Valid @RequestBody User user, BindingResult br) {
        // validate user
        // persist user
        return ResponseEntity.ok(user);
    }
}
@FeignClient(value = "serviceA", decode404 = true)
public interface UserFeignClient extends UserRest {}
java.lang.IllegalStateException: Method has too many Body parameters: public abstract org.springframework.http.ResponseEntity com.mypackage.servicea.api.UserRest.createUser(org.apache.catalina.User,org.springframework.validation.BindingResult)

为什么Feign认为BindingResult是第二个身体实体?有什么办法可以解决这个问题吗?

共有1个答案

颛孙高义
2023-03-14

一般而言,它认为

公共ResponseEntity createUser(@Valid@RequestBody User User,BindingResult br);

作为

您可以在feing/contract.java文件中对此进行调试。

最好的方法是将假客户机与接口分开。

 类似资料:
  • 我对假装很陌生。今天就发现吧……当我读到Spring Cloud Feign时,我的第一个问题是:“您如何包装您的Fiign客户机?” 我举个例子。假设我们有2个微服务M1和M2。M2使用来自M1的endpoint。 null 也许我完全错了,请指正。 多谢!拜拜

  • 假客户端支持可选请求参数吗? 例如,我有一个endpoint,但我没有找到一种方法,可以使用feign client使param1成为可选的。

  • 在Github和在线上,我看到了多个版本的Feign客户端Spring-Cloud、OpenFeign、Netflix.Feign都有不同的版本。谁能描述一下在生产中应该使用的最好的和稳定的假客户是什么? 应用: 我尝试了所有可能的注释排列,认为它可以解决自动操作的东西,但还是失败了

  • 当运行命令“mvn clean”时,它返回构建成功,但当运行“mvn-install”时,返回编译失败。你能帮我找出错误的原因吗?提前谢谢。 我使用的是eclipse juno IDe、maven3.2.1和jdk 1.7

  • 使用Spring云合同验证生产者和消费者之间的合同。在我的消费者控制器中,我正在使用Feign client调用另一个微服务方法来获取一些数据。但是现在在SpringCloud contract中,为这个微服务进行存根调用是不可能的。 使用Spring Cloud与Netflix OSS。

  • 我正在使用spring Cloud的eureka和feign在一些服务之间进行通信(比如A和B)。现在我想统一测试一个服务(a)的服务层。问题是,这个服务(A)正在使用一个假客户机来请求其他服务(B)的一些信息。 编辑:我最终为虚假客户机创建了一个存根。存根被标记为主要组件,以强制spring在我的测试中实例化存根。 这是我提出的解决方案。