最近使用 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); }
這種方式通過嘗試,沒有做用。暫時不清楚緣由。ide
@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;