Spring 使用 feign時設置header信息

最近使用 SpringBoot 項目,把一些 http 請求轉爲 使用 feign方式。可是遇到一個問題:個別請求是要設置header的。java

因而,查看官方文檔和博客,大體推薦兩種方式。也多是我沒看明白官方文檔。json

接口以下:app

@FeignClient(url = "XX_url", value = "XXService")
public interface XXService {

    @RequestMapping(value = "/xx", method = RequestMethod.POST)
    @Headers({"Content-Type: application/json","Accept: application/json"})
    String sendDing(String params);
}

  

1. 使用Headers註解。直接在請求上或者在類上添加

這種方式通過嘗試,沒有做用。暫時不清楚緣由。ide

2. 經過實現RequestInterceptor接口,完成對全部的Feign請求,設置Header

@Component
public class FeginClientConfig {
    @Bean
    public RequestInterceptor headerInterceptor() {
        return new RequestInterceptor() {
            @Override
            public void apply(RequestTemplate requestTemplate) {
                    // 小示例,沒什麼卵用
                    requestTemplate.header("Content-Type", "application/json");
            }
        };
    }

    @Bean
    public Logger.Level level() {
        return Logger.Level.FULL;
    }

}
            

  這種方式,是針對全部feign請求進行攔截,設置Header,不適於個人需求。url

 

後來發現其實個人思路走偏了。諮詢了一個同事,既然使用的是RequestMapping註解。那麼直接使用RequestMapping註解的header屬性就能夠了。以下:code

@RequestMapping(value = "/xx", method = RequestMethod.POST, headers = {"content-type=application/x-www-form-urlencoded"})

  有一點須要注意:content-type=application/x-www-form-urlencoded。此時,方法裏接收的參數,就不能直接是一個對象(Map等)。否則仍是會默認orm

content-type爲 application/json.
@RequestMapping(value = "/xx", method = RequestMethod.POST, headers = {"content-type=application/x-www-form-urlencoded"})
String login(@RequestParam("username") String username, @RequestParam("password") String password;
相關文章
相關標籤/搜索