1、httphead传参丢失问题:
方法一、重写feign的拦截器
import org.springframework.context.annotation.Configuration;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import feign.RequestInterceptor;
import feign.RequestTemplate;
import javax.servlet.http.HttpServletRequest;
import java.util.Enumeration;
@Configuration
public class FeignConfiguration implements RequestInterceptor {
@Override
public void apply(RequestTemplate template) {
ServletRequestAttributes attributes = (ServletRequestAttributes)
RequestContextHolder.getRequestAttributes();
HttpServletRequest request = attributes.getRequest();
Enumeration<String> headerNames = request.getHeaderNames();
if (headerNames != null) {
while (headerNames.hasMoreElements()) {
String name = headerNames.nextElement();
String values = request.getHeader(name);
template.header(name, values);
}
}
}
方法二、方法调用时显示传参
-
@PostMapping(value = "/getServiceInfo")
-
public ReturnInfo getServiceInfo(@RequestHeader(name = "id") String id);
启动类上
@EnableDiscoveryClient
@EnableFeignClients
server-provide
@Slf4j
@RestController
@RefreshScope
@RequestMapping("/test/payment")
public class PaymentController {
@Resource
private PaymentService paymentService;
/**
* 查询
* http://127.0.0.1:9001/test/payment/getServiceInfo/31
* @param id
* @return
*/
@GetMapping(value = "getServiceInfo/{id}")
public String getServiceInfo(@PathVariable("id") Long id) {
String serverInfo = paymentService.getServiceInfo(id);
log.info("*****查询结果: " + serverInfo);
return "查询成功,服务信息:" + serverInfo;
}
}
调用端
@Slf4j
@RestController
@RefreshScope
@RequestMapping("/test/feignClient")
public class FeignClientController {
@Resource
private PaymentFeignService paymentFeignService;
//http://127.0.0.1:9001/test/feignClient/getServiceInfo/31
@GetMapping(value = "/getServiceInfo/{id}")
public String getPaymentById(@PathVariable("id") Long id) {
return paymentFeignService.getServiceInfo(id);
}
}
@Component
@FeignClient(value = "server-provide")
public interface PaymentFeignService {
@GetMapping(value="/test/payment/getServiceInfo/{id}")
String getServiceInfo(String id);