此文章记录一下在工作当中 Java SpringCloud 工程调用 PHP 接口的过程,首先需要创建一个 SpringBoot 的工程应用,然后添加如下所需依赖,修改 pom.xml
<parent>
<artifactId>spring-boot-starter-parent</artifactId>
<groupId>org.springframework.boot</groupId>
<version>2.2.3.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
</dependencies>
定义一个实体类专门用来封装 PHP 接口返回的数据,具体内容如下所示:
/**
* @author BNTang
*/
@Data
public class PhpData<T> {
/**
* 返回信息
*/
private String message;
/**
* 返回状态吗
*/
private String code;
/**
* 返回数据
*/
private T Data;
}
我这里使用的是 RestTemplate 进行调用的,好像 Feign 也可以调用我也没试过,后面我在出吧。先看看 RestTemplate 怎么玩吧,编写控制器,如下所示:
/**
* @author BNTang
*/
@Controller
public class PHPController {
private String url = "http://47.88.86.174/prmapi/index.php?r=ebayapi/GetCampaignsBidPercentage&sku=%s&site=%s";
@Autowired
private RestTemplate restTemplate;
@GetMapping("/PHPTest")
@ResponseBody
public String phpTest() {
ResponseEntity<PhpData> exchange = this.restTemplate.exchange(String.format(url, "DKJ3Z2418DKJ500MWV1", "ca"), HttpMethod.GET, null, PhpData.class);
System.out.println(exchange.getBody());
return "success";
}
}
上面的控制器主要做了,定义了一个变量应该是一个常量,我就不改了,实际中应该是一个常量的,这里是一个 GET 请求的接口参数是在 URL 后面进行拼接的我使用的是 %s
来占位,在 exchange
方法中通过 String.format
方法进行格式化成最后的 URL 接口地址,在 String.format 中指定了接口需要的参数,然后指定了请求方式为 GET
第三个参数为 null
是一个请求实体,第四个参数是指定接口返回来的数据类型,我这里就直接指定为了我之前用来封装接口返回数据的实体类的类型了,然后直接启动工程访问控制器即可验证啦