GET/POST 使用 Spring 引导请求 REST API
GET/POST Requst to REST API using Spring Boot
我有一个 REST 服务,一个像 https://api.myrestservice.com
这样的外部服务器,我在 http://localhost:8080
上本地有一个 Spring 引导应用程序 运行。现在我想向 REST API 地址发出 GET 或 POST 请求,即 https://api.myrestservice.com/users
以获取所有用户,使用我的本地 运行 Spring 引导应用程序,即通过 http://localhost:8080/users
。我不知道如何将本地应用程序请求重定向到外部服务器请求。
希望我答对了你的问题。您正在尝试让您的本地应用程序从您服务器上的应用程序 运行 获取数据。
您可以在 spring 引导应用程序中使用以下示例代码。
private void getUsers() {
final String uri = "https://api.myrestservice.com/users";
RestTemplate restTemplate = new RestTemplate();
Users result = restTemplate.getForObject(uri, Users.class);
System.out.println(result);
}
然后您的 getUsers 可以在您的 spring 启动应用程序中被 getUsers 控制器调用。
如果您想查看更多示例,我正在添加参考 -
https://howtodoinjava.com/spring-restful/spring-restful-client-resttemplate-example/
有很多方法可以做到。像 Apache HTTP 组件和其他。样本
String type = "application/x-www-form-urlencoded" Or Set your desire content type;
String encodedData = URLEncoder.encode( rawData, "UTF-8" );
URL u = new URL("your remote url");
HttpURLConnection conn = (HttpURLConnection) u.openConnection();
conn.setDoOutput(true);
conn.setRequestMethod("POST");
conn.setRequestProperty( "Content-Type", type );
conn.setRequestProperty( "Content-Length",
String.valueOf(encodedData.length()));
OutputStream os = conn.getOutputStream();
os.write(encodedData.getBytes());
这里发生了一些事情,比如 URLEncoding 在安全方面确实很重要。
注:以上代码来源:here.
从您的代码向另一台服务器发出 post Api 调用:
假设您有一台服务器 https://searchEmployee...其中 returns 您列出了属于特定城市或属于特定组织的员工:
请求正文:
{
"city" : "Ranchi",
"organisation" : "Bank Of America"
}
json 响应:[{"name": "Vikash"},{"name":"kumar" },{}...etc]
然后要进行 post api 调用,您可以像这样在 java 中使用 RestTemplate:
public void makeApiCall(){
final String uri = "https://searchEmployee...";
RestTemplate restTemplate = new RestTemplate();
String reqBody = "{"city": "Ranchi"}";
String result = restTemplate.postForObject(uri, reqBody, String.class);
// convert your result into json
try {
jsonResponse = new JSONObject(result);
} catch (JSONException e) {
e.printStackTrace();
}
//extract a value "name" from your json data:
try{
String value = jsonResponse.getString("name");
}catch(JSONException e) {
e.printStackTrace();
}
}
/******************************************** ***************************/
如果您要设置多个请求正文参数,请这样做:
String reqBody = "{\"quantity\":100,\"name\":\"product1\",\"ifBoolean\":false}";
false 是请求正文中的布尔值,100 是整数。
注意
如果您在设置请求正文时遇到问题,请直接从 postman 请求正文复制它并将其粘贴到双引号内。
这非常简单通过使用 Java 客户端,您可以使用 RestTemplate 或 UniRest
Remote 上的那个 运行 就是 Producer 而在本地的那个是 Consumer 所以你可以交换 Resttemplate 的方法或者获取 Unirest 的方法
示例代码在这里。
@RequestMapping(value = "/testclient")
public String testclient()
{
HttpHeaders headers = new HttpHeaders();
headers.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));
HttpEntity<String> entity = new HttpEntity<String>(headers);
return restTemplate.exchange("https://www.mocky.io/v2/5185415ba171ea3a00704eed", HttpMethod.GET, entity, String.class).getBody();
}
对于Unirest代码是这样的
HttpResponse<JsonNode> jsonResponse = null;
try {
jsonResponse = Unirest.get("https://www.mocky.io/v2/5185415ba171ea3a00704eed")
.header("accept", "application/json").queryString("apiKey", "123").asJson();
} catch (UnirestException e) { // TODO Auto-generated catch block
e.printStackTrace();
}
return jsonResponse.getBody().toString();
我有一个 REST 服务,一个像 https://api.myrestservice.com
这样的外部服务器,我在 http://localhost:8080
上本地有一个 Spring 引导应用程序 运行。现在我想向 REST API 地址发出 GET 或 POST 请求,即 https://api.myrestservice.com/users
以获取所有用户,使用我的本地 运行 Spring 引导应用程序,即通过 http://localhost:8080/users
。我不知道如何将本地应用程序请求重定向到外部服务器请求。
希望我答对了你的问题。您正在尝试让您的本地应用程序从您服务器上的应用程序 运行 获取数据。
您可以在 spring 引导应用程序中使用以下示例代码。
private void getUsers() { final String uri = "https://api.myrestservice.com/users"; RestTemplate restTemplate = new RestTemplate(); Users result = restTemplate.getForObject(uri, Users.class); System.out.println(result); }
然后您的 getUsers 可以在您的 spring 启动应用程序中被 getUsers 控制器调用。
如果您想查看更多示例,我正在添加参考 - https://howtodoinjava.com/spring-restful/spring-restful-client-resttemplate-example/
有很多方法可以做到。像 Apache HTTP 组件和其他。样本
String type = "application/x-www-form-urlencoded" Or Set your desire content type;
String encodedData = URLEncoder.encode( rawData, "UTF-8" );
URL u = new URL("your remote url");
HttpURLConnection conn = (HttpURLConnection) u.openConnection();
conn.setDoOutput(true);
conn.setRequestMethod("POST");
conn.setRequestProperty( "Content-Type", type );
conn.setRequestProperty( "Content-Length",
String.valueOf(encodedData.length()));
OutputStream os = conn.getOutputStream();
os.write(encodedData.getBytes());
这里发生了一些事情,比如 URLEncoding 在安全方面确实很重要。 注:以上代码来源:here.
从您的代码向另一台服务器发出 post Api 调用:
假设您有一台服务器 https://searchEmployee...其中 returns 您列出了属于特定城市或属于特定组织的员工:
请求正文:
{
"city" : "Ranchi",
"organisation" : "Bank Of America"
}
json 响应:[{"name": "Vikash"},{"name":"kumar" },{}...etc]
然后要进行 post api 调用,您可以像这样在 java 中使用 RestTemplate:
public void makeApiCall(){
final String uri = "https://searchEmployee...";
RestTemplate restTemplate = new RestTemplate();
String reqBody = "{"city": "Ranchi"}";
String result = restTemplate.postForObject(uri, reqBody, String.class);
// convert your result into json
try {
jsonResponse = new JSONObject(result);
} catch (JSONException e) {
e.printStackTrace();
}
//extract a value "name" from your json data:
try{
String value = jsonResponse.getString("name");
}catch(JSONException e) {
e.printStackTrace();
}
}
/******************************************** ***************************/
如果您要设置多个请求正文参数,请这样做:
String reqBody = "{\"quantity\":100,\"name\":\"product1\",\"ifBoolean\":false}";
false 是请求正文中的布尔值,100 是整数。
注意 如果您在设置请求正文时遇到问题,请直接从 postman 请求正文复制它并将其粘贴到双引号内。
这非常简单通过使用 Java 客户端,您可以使用 RestTemplate 或 UniRest Remote 上的那个 运行 就是 Producer 而在本地的那个是 Consumer 所以你可以交换 Resttemplate 的方法或者获取 Unirest 的方法 示例代码在这里。
@RequestMapping(value = "/testclient")
public String testclient()
{
HttpHeaders headers = new HttpHeaders();
headers.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));
HttpEntity<String> entity = new HttpEntity<String>(headers);
return restTemplate.exchange("https://www.mocky.io/v2/5185415ba171ea3a00704eed", HttpMethod.GET, entity, String.class).getBody();
}
对于Unirest代码是这样的
HttpResponse<JsonNode> jsonResponse = null;
try {
jsonResponse = Unirest.get("https://www.mocky.io/v2/5185415ba171ea3a00704eed")
.header("accept", "application/json").queryString("apiKey", "123").asJson();
} catch (UnirestException e) { // TODO Auto-generated catch block
e.printStackTrace();
}
return jsonResponse.getBody().toString();