在Java项目中调用第三方接口的方式有:
①通过JDK网络类Java.net.HttpURLConnection;
②通过common封装好的HttpClientUtil类,doGet和doPost方法用于接口调用;
③通过Apache封装好的CloseableHttpClient;
④通过SpringBoot-RestTemplate;
详情可看:https://www.cnblogs.com/swordfall/p/10757499.html
1.被调用方对应controller方法为:
(配置文件application.properties中:spring.application.name=discovery-server)
package cn.zy.nacosdiscoveryserver.controller;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.*;
@RefreshScope
@RestController
@RequestMapping("/discovery")
public class serverController {
@RequestMapping(value = "/output", method = RequestMethod.GET)
public String output() {
return "Server success";
}
}
2.通过SpringBoot-RestTemplate:
Springboot中调用外部接口方法:
调用方代码:
package cn.zy.nacosdiscoveryconsumer.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
@RestController
@RequestMapping("/interface")
public class InterfaceController {
@RequestMapping("/consumer")
public void out() {
RestTemplate restTemplate = new RestTemplate();
String url = "http://localhost:7777/discovery/output";
String s = restTemplate.getForObject(url, String.class);
System.out.println(s);
}
}
3.调用服务方法:
nacos调用服务方法:
首先需要被调用方有动态服务发现功能,其次{@AutoWire自动注入bean–restTemplate (package org.springframework.web.client中)},
!!!注意:这里的restTemplate必须使用@AutoWire注入web.client包的,或者创建一个配置类config在其中方法里new RestTemplate返回并在方法上加@LoadBalanced开启Ribbon集成。不可以直接new RestTemplate使用,否则会识别不出服务名。
使用restTemplate.getForObject(“http://被调用服务名application.name/被调用方法的请求url”)
调用方代码:
package cn.zy.nacosdiscoveryconsumer.controller;
import cn.zycfc.nacosdiscoveryconsumer.util.Config;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
@RestController
@RequestMapping("/server")
public class ServerController {
@Autowired
private Config config;
@RequestMapping("/consumer")
public void out() {
RestTemplate restTemplate=config.restTemplate();
String url = "http://discovery-server/discovery/output";
String s = restTemplate.getForObject(url, String.class);
System.out.println(s);
}
}
或者调用方代码:
package cn.zy.nacosdiscoveryconsumer.controller;
import cn.zycfc.nacosdiscoveryconsumer.util.Config;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
@RestController
@RequestMapping("/serverONE")
public class ServerONEController {
@Autowired
private RestTemplate restTemplate;
@RequestMapping("/consumer")
public void out() {
String url = "http://discovery-server/discovery/output";
String s = restTemplate.getForObject(url, String.class);
System.out.println(s);
}
}
注:直接调用接口常用方法有Appache的CloseableHttpClient工具类或者Springboot的RestTemplate/RestTemplateUtils工具类,传入参数url=调用接口服务的ip地址+"/api/…(接口层级目录)
注册到nacos等工具上进行服务调用常用方法有springboot的restTemplate类,参数url可以将服务的ip地址更换为服务名:url=http://被调用服务名${application.name}/api
/…(被调用方法的请求url)"