您的位置:首页 > 产品设计 > UI/UE

从HttpServletRequest读取请求参数转接到其它服务器接口的公共方法

2019-03-15 14:35 766 查看

从HttpServletRequest读取请求参数,通过URL转接到另外服务器的接口公共方法

需求:有时需要我们写一个通用的转接请求方法,采用公共方法来透传到另外的服务器上接口,这样无论是怎样的参数请求,都可以通过公共方法接口通过http转接请求到另外的服务器上

1、首先我们可能需要从HttpServletRequest中获取相应的请求头header中的数据
Enumeration<String> element = request.getHeaderNames();
Request.Builder builder = Request.options();
while (element.hasMoreElements()) {
String name = element.nextElement();
if ("signature".equals(name) || "token".equals(name) || "timestamp".equals(name)) {
String value = request.getHeader(name);
builder.addHeader(name, value);
}
}

从上面可以看出,有一些header中的参数token、signature等

2、然后就是需要从HttpServletRequest中获取请求参数body
public static String requestBody(HttpServletRequest request) throws IOException {
// 读取请求内容
BufferedReader br = new BufferedReader(new InputStreamReader(request.getInputStream(), "UTF-8"));
String line;
StringBuilder sb = new StringBuilder();
while ((line = br.readLine()) != null) {
sb.append(line);
}
return sb.toString();
}
3、接着需要将上述读取的数据存入到Request.Builde中,采用http请求方法实现转接
String jsonBody = requestBody(request);
Response response = WebUtils.executeHttp(builder
.setUrl(url)
.setMethod(Method.POST)
.setJsonBody(jsonBody)
.build());
if (null != response) {
String resultString = response.getJsonString();
return resultString;
}

上述是我们实现一个公共的方法的步骤即可实现一个公共的转接。

当然需要封装一个http的请求工具方法,如下:

public static Response executeHttp(Request request){
int timeout = request.getTimeout();
int retry = request.getRetry();
CloseableHttpClient client = null;
try {
client = HttpClients.createDefault();
for(int i = 1;;i++){
try {
RequestConfig config = RequestConfig.custom()
.setConnectionRequestTimeout(timeout)
.setConnectTimeout(timeout)
.setSocketTimeout(timeout)
.build();
Method method = request.getMethod();
String content = null;
switch(method){
case POST:{
content = doPost(client,config,request);
break;
}
default:{
break;
}
}
Response response = new Response();
response.setJsonString(content);
return response;
} catch (Exception e) {
e.printStackTrace();
if(i >= retry){
return null;
}
}
}
} finally{
if(null != client){
try {
client.close();
client = null;
} catch (IOException e) {
e.printStackTrace();
}
}
}
}

private static String doPost(CloseableHttpClient client,RequestConfig config,Request request)throws Exception{
CloseableHttpResponse response = null;
HttpPost http = null;
try {
http = new HttpPost(request.getUrl());
http.setConfig(config);
addHeaders(http, request.getHeaders());
http.addHeader("Content-Type","application/json");
http.addHeader("Accept","application/json");
StringEntity entity = new StringEntity(request.getJsonBody());
http.setEntity(entity);
response = client.execute(http);
HttpEntity httpEntity = response.getEntity();
return EntityUtils.toString(httpEntity, "UTF-8");
} finally{
if(null != http){
http.releaseConnection();
}
if(null != response){
response.close();
}
}
}

/**
* 添加请求头
* @param request
* @param headers
*/
private static void addHeaders(HttpRequest request,Map<String,Object> headers){
if(null != headers && headers.size() > 0){
for(Map.Entry<String, Object> entry : headers.entrySet()){
request.addHeader(entry.getKey(), entry.getValue()+"");
}
}
}

以上是个人经验分享,仅供参考

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐