JAVA端口请求换了_【Java】替换掉RestTemplate的Feign请求

FeignClient实战
本文介绍FeignClient在项目中的实际应用,包括基本配置、请求拦截器的定义及动态URL拼接等高级用法。

使用FeignClient比使用RestTemplate更加简洁。

依赖

org.springframework.cloud

spring-cloud-starter-openfeign

2.1.1.RELEASE

定义FeginClient接口

@FeignClient(name = "test", url = "http://xxx.xxx.xxx.xxx:xxxx")

public interface TestClient {

@PostMapping(path = "/test")

TestRes test(TestReq req);

}

示例定义了一个post请求,@FeignClient里面定义的url是要请求的接口的服务地址和端口号,将出入参封装在类对象里,与平时写的Controller层接口一样,简洁实用。

其他示例

AuthClient.java

@FeignClient(name = "auth", url = "http://xxx.xxx.xxx.xxx:xxxx", configuration = FeignConfig.class)

public interface AuthClient {

@GetMapping(path = "/authentication-token")

TokenResDTO getToken(@RequestHeader("Authorization") String authorization);

@GetMapping(path = "/refresh-token")

TokenResDTO refreshToken(@RequestParam("token") String token);

}

FeignConfig.java

@Slf4j

public class FeignConfig extends FeignClientProperties.FeignClientConfiguration {

@Bean

public RequestInterceptor requestInterceptor() {

return requestTemplate -> {

log.info("url: {}", requestTemplate.request().url());

log.info("params: {}", requestTemplate.requestBody().asString());

};

}

}

FeignConfig类定义了一个Bean,这个Bean将请求的url和参数打印到日志中,当@FeignClient中指定了使用FeignConfig,则该类定义的所有方法将适用FeignConfig定义的Bean方法。

上面示例中,当请求中需要传header内容时,通过@RequestHeader指定参数名,调用该方法时通过参数传入就可以了。

特殊示例

当需要动态拼接字段在url后面的时候

FeignConfig.java

@Slf4j

public class FeignConfig extends FeignClientProperties.FeignClientConfiguration {

@Bean

public RequestInterceptor requestInterceptor() {

return requestTemplate -> {

// 从header参数中取key为Append-Url的值拼接在定义的url后面

Collectionurl = requestTemplate.headers().get("Append-Url");

if (url != null && !url.isEmpty()) {

requestTemplate.uri(url.stream().findFirst().get(), true);

}

log.info("url: {}", requestTemplate.request().url());

log.info("params: {}", requestTemplate.requestBody().asString());

};

}

}

TestClient.java

@FeignClient(name = "test", url = "http://xxx.xxx.xxx.xxx:xxxx")

public interface TestClient {

@GetMapping(path = "/test")

TestRes test(@RequestHeader("Append-Url") String appendUrl);

}

调用FeignClient

可以在Controller层或Service层进行调用,例如:

@Resource

private AuthClient authClient;

@GetMapping("/test/refresh")

public String refreshToken(@RequestParam String token) {

TokenResDTO res = authClient.refreshToken(token);

if (res != null) {

return res.getData();

}

return null;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值