gpt4 book ai didi

java - 如何使用 Spring RestTemplate 代替 Apache Httpclient?

转载 作者:行者123 更新时间:2023-12-01 09:53:20 29 4
gpt4 key购买 nike

我想使用 Spring RestTemplate 而不是 Apache HttpClient 来处理远程 API

With HttpClient

// build request JSON
JSONObject json = new JSONObject();
json.put("username", username);
json.put("serial", serial);
json.put("keyId", keyId);
json.put("otp", otp);

String json_req = json.toString();

// make HTTP request and get response
HttpPost request = new HttpPost(AuthServer);
request.setHeader("Content-Type", "application/json");
request.setEntity(new StringEntity(json_req));

response = client.execute(request);

With RestTemplate

Map<String, String> paramMap = new HashMap<String,String>();
paramMap.put("username", userName);
paramMap.put("serial", serial);
paramMap.put("keyId", keyId);
paramMap.put("otp", otp);

String mapAsJson = new ObjectMapper().writeValueAsString(paramMap);

HttpHeaders requestHeaders = new HttpHeaders();
requestHeaders.setContentType(MediaType.APPLICATION_JSON);
HttpEntity<String> request = new HttpEntity<String>(mapAsJson,requestHeaders);

try {
ResponseEntity<String> response = restTemplate.exchange(AuthServer, HttpMethod.POST, request, String.class);

return response.getHeaders();
} catch (HttpClientErrorException e) {
return null;
}

}

使用 HttpClient 的代码可以工作,但使用 RestTemplate 的代码则不行。我不知道如何在 RestTemplate 中使用 StringEntity

Spring版本是3.0.0,JVM是1.6。

最佳答案

RestTemplate 更适合处理对象。举个例子:

AuthenticationRequest.java

class AuthenticationRequest {
private String username;
private String serial;
private String key;
private String otp;
}

AuthenticationResponse.java

class AuthenticationResponse {
private boolean success;
}

AuthenticationCall.java

class AuthenticationCall {
public AuthenticationResponse execute(AuthenticationRequest payload) {
HttpEntity<AuthenticationRequest> request = new HttpEntity<AuthenticationRequest>(payload, new HttpHeaders());

return restTemplate.exchange("http://www.domain.com/api/endpoint"
, HttpMethod.POST
, request
, AuthenticationResponse.class).getBody();
}
}

这些类可以按如下方式使用:

if(new AuthenticationCall().execute(authenticationRequest).isSuccess()) {
// Authentication succeeded.
}
else {
// Authentication failed.
}
<小时/>

所有这些都要求类路径上有一个 JSON 库,例如 Jackson 或 GS​​ON。

关于java - 如何使用 Spring RestTemplate 代替 Apache Httpclient?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37450028/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com