【问题标题】:Is there a way to add multiple headers when using Feign Client使用 Feign Client 时有没有办法添加多个标题
【发布时间】:2020-04-05 04:36:36
【问题描述】:

我有一个 Feign 客户端来访问需要两个标头的 createUser 端点:用户名和密码。我知道如何添加一个标头,但是如何在请求中添加两个标头?

@FeignClient(name = "client", url = "https://abc.abc.com/user/", configuration = FeignClientConfig.class)
public interface MyFeignClient {

@Headers("username_header: {username}")  // how do I add "password" here.
@PostMapping(value = "v1/users")
void createUser((@Param("username") String username, User userRequest);

}

更新:现在根据下面的回答,我将界面主体改为:

@Headers({"username_header: {username}", "password_header: {password}"}) 
@PostMapping(value = "v1/users")
void createUser(@Param("username") String username, 
                @Param("password") String password,
                User userRequest);

调用它的代码是:

feignClient.createUser("me", "123", userObj);

然后我得到一个错误:

 org.springframework.beans.factory.BeanCreationException: Error creating bean,
 nested exception is java.lang.IllegalStateException: Method has too many Body parameters: 
 feignClient.createUser(java.lang.String,java.lang.String, User)

【问题讨论】:

    标签: java spring-cloud-feign openfeign


    【解决方案1】:

    Headers 接受 String[] 作为值...所以

        @Headers({ "username: {username}", "password: {password}" })
    

    应该做的伎俩

    【讨论】:

    • 谢谢,我试过了,我在 createUser 方法签名中添加了password,但我收到一条错误消息,提示“方法的正文参数太多:”
    • 你能把那个代码贴出来@jlp吗?由于 headers 和 body 参数不同...
    【解决方案2】:
    @RequestLine("POST /v1/users")
    @Body("{userBody}")
    Response createUser(@HeaderMap Map headerMap, @Param(value = "userBody") String userBody);
    

    更新

    @RequestLine("POST /v1/users") 
    Response createUser(String userBody, @HeaderMap Map headerMap);
    

    【讨论】:

    • 不适合我:IllegalStateException: Method has too many Body parameters :-(
    • 根据文档 ... @RequestLine("GET /servers/{serverId}") void get(@Param("serverId") String serverId, @HeaderMap Map ); ...您可以尝试如下所述吗? @RequestLine("POST /v1/users") Response createUser(String userBody, @HeaderMap Map headerMap);
    【解决方案3】:

    我知道可能会迟到,但我很想帮助别人。

    什么对我有用:

    import org.springframework.web.bind.annotation.PostMapping;
    import org.springframework.web.bind.annotation.RequestBody;
    import org.springframework.web.bind.annotation.RequestHeader;
    import org.springframework.web.bind.annotation.RequestParam;
    
    @PostMapping(path = "${service-uri}", consumes = MediaType.APPLICATION_JSON_VALUE)
        String callService(@RequestBody MyBodyClass body, @RequestParam Integer param01, @RequestParam String param02, @RequestHeader Map<String, String> headerMap);
    

    @HeaderMap 提出的解决方案不起作用,显然是因为这个类来自 feign 包(导入 feign.HeaderMap)。

    【讨论】:

      猜你喜欢
      • 2018-04-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-16
      • 1970-01-01
      • 2016-10-17
      相关资源
      最近更新 更多