从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中获取请求参数bodypublic 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()+""); } } }
以上是个人经验分享,仅供参考
相关文章推荐
- 在servlet中GET请求可以通过HttpServletRequest的getRequestURL方法和getQueryString()得到完整的请求路径和请求所有参数列表,POST的需要getPa
- Http请求和HttpServletRequest中获得对应参数的方法
- 在servlet中GET请求可以通过HttpServletRequest的getRequestURL方法和getQueryString()得到完整的请求路径和请求所有参数列表,POST的需要getPa
- HttpServletRequest、request常用方法、request常见应用、请求转发、RequestDispatcher
- HttpServletRequest接收参数的几种方法
- [Servlet]HttpServletRequest的请求参数、标头、编码
- java通过HttpServletRequest获取post请求中的body内容的方法
- 使用main方法调用http请求本地服务器的某个servlet报错问题
- HttpServletRequest获取请求参数
- Web HttpServletRequest的getRequestURL方法获取不到https协议请求问题
- HttpServletRequest和HttpServletResponse接口的方法
- 14SpringMvc_在业务控制方法中写入HttpServletRequest,HttpServletResponse等传统web参数(这个知识点知道就好了,不推荐这么去做)
- http请求接口公共方法。(restful方式)
- springmvc中随时获得request(这种情况在为文件MultipartHttpServletRequest的请求下可以获得参数)
- SpringMVC 重写、扩展HttpServletRequest请求参数
- asp.net(c#)使用HttpWebRequest附加携带请求参数以post方式模拟上传大文件(以图片为例)到Web服务器端
- 请求重定向与请求转发的比较(HttpServletResponse.sendRedirect方法和RequestDispatcher.forward方法)
- 参数方法HttpServletRequest之getParameter
- 【转】asp.net(c#)使用HttpWebRequest附加携带请求参数以post方式模拟上传大文件(以图片为例)到Web服务器端
- java遍历http请求request的所有参数实现方法