注意事項
- FeignClient 中不要寫url, 使用 @RequestLine修飾方法
- 調用地方必須引入 FeignClientConfiguration, 必須有Decoder, Encoder
- 調用類必須以構建函數(Constructor) 的方式注入 FeignClient 類
- 傳入URL作爲參數;
代碼如下:
FeignClient類:
@CompileStatic
@FeignClient(name = "xxxxClient")
public interface XxxFeignClient {
@RequestLine("POST")
ResponseDto notifySomething(URI baseUri, ApproveNotifyDto notifyDto);
/**
*
* @param uri
* @param queryMap: {userId: userId}
* @return
*/
@RequestLine("GET")
ResponseDto getSomething(URI baseUri, @QueryMap Map<String, String> queryMap)
}
ClientCaller類:
@CompileStatic
@Slf4j
@Component
@Import(FeignClientsConfiguration.class)
public class CallerService {
private XxxFeignClient xxxFeignClient
@Autowired
public CallerService(Decoder decoder, Encoder encoder) {
xxxFeignClient = Feign.builder()
//.client(client)
.encoder(encoder)
.decoder(decoder)
.target(Target.EmptyTarget.create(XxxFeignClient.class))
}
public ResponseDto notifySomething(String url, XxxxDto dto) {
return xxxFeignClient.notifySomething(URI.create(url), dto)
}
/**
* @param url: http://localhost:9104/
* @param userId
*/
public String getSomething(String url, String userId) {
return xxxFeignClient.getSomething(URI.create(url), ["userId": userId])
}
}