创建模拟接口
controller 层
:
控制层,负责处理用户请求,并根据请求调用相应的业务逻辑,然后返回对应的视图或数据。
model 层
:
数据模型层,负责数据的处理和业务逻辑;在 model 层中,我们经常会为每一个实体或者对象创建一个对应的类。
在 model 层
创建一个 User类
,在 User 类写一个用户名属性。
在 controller 包
下新建 NameController.java
调用 http://localhost:8123/api/name/?name=sujie
开发调用接口
已经成功地开发出了这个接口,但对于开发者来说,总不能每次都通过在浏览器地址栏输入接口地址来调用它,那么开发者通常是如何调用接口的呢?要么在前端进行调用,要么在后端,即我们的后端系统调用你的接口。
出于安全考虑,我们通常会选择在后端调用第三方 API,因为这样可以避免在前端暴露诸如密码这样的敏感信息。
下一步,将演示如何在项目中调用第三方的接口。
调用接口的方式
HTTP 调用方式:
- HttpClient
- RestTemplate
- 第三方库(OKHTTP、Hutool)
工具的官方文档:
- Hutool
- Http 客户端工具类
Hutool 引入之后,就可以用它各种各样的工具了,在 Hutool 找到Http 客户端工具类-HttpUtil
,我们就用它来快速的调用其他的 http 请求。
// 可以单独传入http参数,这样参数会自动做URL编码,拼接在URL中
HashMap<String, Object> paramMap = new HashMap<>();
paramMap.put("city", "北京");
String result3= HttpUtil.get("https://www.baidu.com", paramMap);
Restful 请求
String json = ...;
String result2 = HttpRequest.post(url)
.body(json)
.execute().body();
负责调用第三方接口的类
public class SuApiClient {
public String getNameByGet(String name) {
// 可以单独传入http参数,这样参数会自动做URL编码,拼接在URL中
HashMap<String, Object> paramMap = new HashMap<>();
// 将"name"参数添加到映射中
paramMap.put("name", name);
// 使用HttpUtil工具发起GET请求,并获取服务器返回的结果
String result = HttpUtil.get("http://localhost:8123/api/name/", paramMap);
// 打印服务器返回的结果
System.out.println(result);
// 返回服务器返回的结果
return result;
}
public String getNameByPost(@RequestParam String name) {
// 可以单独传入http参数,这样参数会自动做URL编码,拼接在URL中
HashMap<String, Object> paramMap = new HashMap<>();
paramMap.put("name", name);
// 使用HttpUtil工具发起POST请求,并获取服务器返回的结果
String result = HttpUtil.post("http://localhost:8123/api/name/name", paramMap);
System.out.println(result);
return result;
}
// 使用POST方法向服务器发送User对象,并获取服务器返回的结果
public String getUserNameByPost(@RequestBody User user) {
// 将User对象转换为JSON字符串
String json = JSONUtil.toJsonStr(user);
// 使用HttpRequest工具发起POST请求,并获取服务器的响应
HttpResponse httpResponse = HttpRequest.post("http://localhost:8123/api/name/user")
.body(json) // 将JSON字符串设置为请求体
.execute(); // 执行请求
// 打印服务器返回的状态码
System.out.println(httpResponse.getStatus());
// 获取服务器返回的结果
String result = httpResponse.body();
// 打印服务器返回的结果
System.out.println(result);
// 返回服务器返回的结果
return result;
}
}
测试类
public class Main {
public static void main(String[] args) {
SuApiClient suApiClient = new SuApiClient();
String result1 = suApiClient.getNameByGet("苏姐");
String result2 = suApiClient.getNameByPost("苏姐");
User user = new User();
user.setUsername("sj");
String result3 = suApiClient.getUserNameByPost(user);
System.out.println(result1);
System.out.println(result2);
System.out.println(result3);
}
}
结果