博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
RestTemplate发送请求并携带header信息
阅读量:6084 次
发布时间:2019-06-20

本文共 13235 字,大约阅读时间需要 44 分钟。

v1、使用restTemplate的postForObject方法

  注:目前没有发现发送携带header信息的getForObject方法。

HttpHeaders headers = new HttpHeaders();Enumeration
headerNames = request.getHeaderNames();while (headerNames.hasMoreElements()) { String key = (String) headerNames.nextElement(); String value = request.getHeader(key); headers.add(key, value);} String restStrResult = restTemplate.postForObject(url, /*携带header*/new HttpEntity
(headers), String.class, /*携带parameter*/request.getParameterMap());

v2、使用restTemplate

import java.util.Enumeration;import java.util.Map;import javax.servlet.ServletRequest;import javax.servlet.http.HttpServletRequest;import org.springframework.http.HttpEntity;import org.springframework.http.HttpHeaders;import org.springframework.http.HttpMethod;import org.springframework.http.ResponseEntity;import org.springframework.web.client.RestTemplate;public class RestTemplateUtil {        private RestTemplate restTemplate;        public void setRestTemplate(RestTemplate restTemplate) {        this.restTemplate = restTemplate;    }    public String post(ServletRequest req, String url, Map
params) { ResponseEntity
rss = request(req, url, HttpMethod.POST, params); return rss.getBody(); } public String get(ServletRequest req, String url, Map
params) { ResponseEntity
rss = request(req, url, HttpMethod.GET, params); return rss.getBody(); } public String delete(ServletRequest req, String url, Map
params) { ResponseEntity
rss = request(req, url, HttpMethod.DELETE, params); return rss.getBody(); } public String put(ServletRequest req, String url, Map
params) { ResponseEntity
rss = request(req, url, HttpMethod.PUT, params); return rss.getBody(); } /** * @param req * @param url * @param method * @param params maybe null * @return */ private ResponseEntity
request(ServletRequest req, String url, HttpMethod method, Map
params) { HttpServletRequest request = (HttpServletRequest) req; //获取header信息 HttpHeaders requestHeaders = new HttpHeaders(); Enumeration
headerNames = request.getHeaderNames(); while (headerNames.hasMoreElements()) { String key = (String) headerNames.nextElement(); String value = request.getHeader(key); requestHeaders.add(key, value); } //获取parameter信息 if(params == null) { params = request.getParameterMap(); } HttpEntity
requestEntity = new HttpEntity
(null, requestHeaders); ResponseEntity
rss = restTemplate.exchange(url, method, requestEntity, String.class, params); return rss; }}

v 3.restTemplate以json格式发送post请求

  1.发送请求

  public String _post(ServletRequest req, String url, Map
params) { HttpServletRequest request = (HttpServletRequest) req; //拿到header信息 HttpHeaders requestHeaders = new HttpHeaders(); requestHeaders.setContentType(MediaType.APPLICATION_JSON); Enumeration
headerNames = request.getHeaderNames(); while (headerNames.hasMoreElements()) { String key = (String) headerNames.nextElement(); String value = request.getHeader(key); requestHeaders.add(key, value); } net.sf.json.JSONObject jsonParams = net.sf.json.JSONObject.fromObject(params); HttpEntity
requestEntity = new HttpEntity
(jsonParams, requestHeaders); String result = restTemplate.postForObject(url, requestEntity, String.class); return result; }

  2.接收处理

   @RequestMapping("/xxx")      @ResponseBody      public String xxx(HttpServletRequest request) throws IOException {            String jsonString = getBodyString(request.getReader());            JSONObject jbJsonObject = new JSONObject().fromObject(jsonString);            User user = (User) JSONObject.toBean(jbJsonObject, User.class);          System.out.println(jbJsonObject);          System.out.println("id:" + user.getUserName());return null;        }        @RequestMapping("/xxx2")      @ResponseBody      public String xxx2(User user) throws IOException {            System.out.println("---------------");          System.out.println(user.getUserName());          System.out.println(user.getPassWord());          System.out.println("---------------");            if (true) {              return "success";          } else {              return "fail";          }        }      public String getBodyString(BufferedReader br) {     String inputLine;     String str = "";     try {       while ((inputLine = br.readLine()) != null) {       str += inputLine;     }       br.close();     } catch (IOException e) {       System.out.println("IOException: " + e);     }     return str;   }

 

v4. RestTemplate 的两个 postForObject方法的使用

  private static String post(String url, JSONObject params, MediaType mediaType) {        RestTemplate restTemplate = new RestTemplate();        //拿到header信息        HttpHeaders requestHeaders = new HttpHeaders();        requestHeaders.setContentType(mediaType);        HttpEntity
requestEntity = (mediaType == MediaType.APPLICATION_JSON || mediaType == MediaType.APPLICATION_JSON_UTF8) ? new HttpEntity
(params, requestHeaders) : new HttpEntity
(null, requestHeaders); restTemplate.setErrorHandler(new ResponseErrorHandler() { @Override public boolean hasError(ClientHttpResponse response) throws IOException { return response.getStatusCode().value() != HttpServletResponse.SC_OK; } @Override public void handleError(ClientHttpResponse response) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(response.getBody())); String str = null; while((str = br.readLine()) != null) { System.out.println(str); } } }); String result = (mediaType == MediaType.APPLICATION_JSON || mediaType == MediaType.APPLICATION_JSON_UTF8) ? restTemplate.postForObject(url, requestEntity, String.class) : restTemplate.postForObject(expandURL(url, params.keySet()), requestEntity, String.class, params); return result; } private static String expandURL(String url, Set
keys){ final Pattern QUERY_PARAM_PATTERN = Pattern.compile("([^&=]+)(=?)([^&]+)?"); Matcher mc = QUERY_PARAM_PATTERN.matcher(url); StringBuilder sb = new StringBuilder(url); if(mc.find()) { sb.append("&"); } else { sb.append("?"); } for(Object key : keys) { sb.append(key).append("=").append("{").append(key).append("}").append("&"); } return sb.deleteCharAt(sb.length()-1).toString(); }

 

v5.最强版RestTemplateUtils

import com.alibaba.fastjson.JSONObject;import org.springframework.http.HttpEntity;import org.springframework.http.HttpHeaders;import org.springframework.http.MediaType;import org.springframework.http.client.ClientHttpResponse;import org.springframework.http.converter.FormHttpMessageConverter;import org.springframework.util.LinkedMultiValueMap;import org.springframework.util.MultiValueMap;import org.springframework.web.client.ResponseErrorHandler;import org.springframework.web.client.RestTemplate;import javax.servlet.http.HttpServletResponse;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.Iterator;import java.util.List;import java.util.Set;import java.util.regex.Matcher;import java.util.regex.Pattern;/** * @Title: RestTemplateUtils.java * @Prject: sensorsdata * @Package: com.springboottest.sensorsdata.utils * @Description: TODO * @author: hujunzheng * @date: 2017年4月20日 下午2:07:18 * @version: V1.0 */public class RestTemplateUtils {    /**     * @ClassName: DefaultResponseErrorHandler     * @Description: TODO     * @author: hujunzheng     * @date: 2017年4月20日 下午2:15:27     */    private static class DefaultResponseErrorHandler implements ResponseErrorHandler {        @Override        public boolean hasError(ClientHttpResponse response) throws IOException {            return response.getStatusCode().value() != HttpServletResponse.SC_OK;        }        @Override        public void handleError(ClientHttpResponse response) throws IOException {            BufferedReader br = new BufferedReader(new InputStreamReader(response.getBody()));            StringBuilder sb = new StringBuilder();            String str = null;            while ((str = br.readLine()) != null) {                sb.append(str);            }            try {                throw new Exception(sb.toString());            } catch (Exception e) {                e.printStackTrace();            }        }    }    /**     * @param url     * @param params     * @return     * @Title: get     * @author: hujunzheng     * @Description: TODO     * @return: String     */    public static String get(String url, JSONObject params) {        RestTemplate restTemplate = new RestTemplate();        restTemplate.setErrorHandler(new DefaultResponseErrorHandler());        String response = restTemplate.getForObject(expandURL(url, params.keySet()), String.class, params);        return response;    }    /**     * @param url     * @param params     * @param mediaType     * @return     * @Title: post     * @author: hujunzheng     * @Description: 将参数都拼接在url之后     * @return: String     */    public static String post(String url, JSONObject params, MediaType mediaType) {        RestTemplate restTemplate = new RestTemplate();        // 拿到header信息        HttpHeaders requestHeaders = new HttpHeaders();        requestHeaders.setContentType(mediaType);        HttpEntity
requestEntity = (mediaType == MediaType.APPLICATION_JSON || mediaType == MediaType.APPLICATION_JSON_UTF8) ? new HttpEntity
(params, requestHeaders) : new HttpEntity
(null, requestHeaders); restTemplate.setErrorHandler(new DefaultResponseErrorHandler()); String result = (mediaType == MediaType.APPLICATION_JSON || mediaType == MediaType.APPLICATION_JSON_UTF8) ? restTemplate.postForObject(url, requestEntity, String.class) : restTemplate.postForObject(expandURL(url, params.keySet()), requestEntity, String.class, params); return result; } /** * @param url * @param params * @param mediaType * @param clz * @return * @Title: post * @author: hujunzheng * @Description: 发送json或者form格式数据 * @return: String */ public static
T post(String url, JSONObject params, MediaType mediaType, Class
clz) { RestTemplate restTemplate = new RestTemplate(); //这是为 MediaType.APPLICATION_FORM_URLENCODED 格式HttpEntity 数据 添加转换器 //还有就是,如果是APPLICATION_FORM_URLENCODED方式发送post请求, //也可以直接HttpHeaders requestHeaders = new HttpHeaders(createMultiValueMap(params),true),就不用增加转换器了 restTemplate.getMessageConverters().add(new FormHttpMessageConverter()); // 设置header信息 HttpHeaders requestHeaders = new HttpHeaders(); requestHeaders.setContentType(mediaType); HttpEntity
requestEntity = ( mediaType == MediaType.APPLICATION_JSON || mediaType == MediaType.APPLICATION_JSON_UTF8) ? new HttpEntity
(params, requestHeaders) : (mediaType == MediaType.APPLICATION_FORM_URLENCODED ? new HttpEntity
(createMultiValueMap(params), requestHeaders) : new HttpEntity<>(null, requestHeaders)); restTemplate.setErrorHandler(new DefaultResponseErrorHandler()); T result = (mediaType == MediaType.APPLICATION_JSON || mediaType == MediaType.APPLICATION_JSON_UTF8) ? restTemplate.postForObject(url, requestEntity, clz) : restTemplate.postForObject(mediaType == MediaType.APPLICATION_FORM_URLENCODED ? url : expandURL(url, params.keySet()), requestEntity, clz, params); return result; } private static MultiValueMap
createMultiValueMap(JSONObject params) { MultiValueMap
map = new LinkedMultiValueMap<>(); for(String key : params.keySet()) { if(params.get(key) instanceof List) { for(Iterator
it=((List
) params.get(key)).iterator(); it.hasNext(); ) { String value = it.next(); map.add(key, value); } } else { map.add(key, params.getString(key)); } } return map; } /** * @param url * @param keys * @return * @Title: expandURL * @author: hujunzheng * @Description: TODO * @return: String */ private static String expandURL(String url, Set
keys) { final Pattern QUERY_PARAM_PATTERN = Pattern.compile("([^&=]+)(=?)([^&]+)?"); Matcher mc = QUERY_PARAM_PATTERN.matcher(url); StringBuilder sb = new StringBuilder(url); if (mc.find()) { sb.append("&"); } else { sb.append("?"); } for (Object key : keys) { sb.append(key).append("=").append("{").append(key).append("}").append("&"); } return sb.deleteCharAt(sb.length() - 1).toString(); }}
本文转自 小眼儿 博客园博客,原文链接:http://www.cnblogs.com/hujunzheng/p/6018505.html,如需转载请自行联系原作者
你可能感兴趣的文章
什么样的企业可以称之为初创企业?
查看>>
Python爬虫之BeautifulSoup
查看>>
《HTML 5与CSS 3权威指南(第3版·下册)》——第20章 使用选择器在页面中插入内容...
查看>>
如何判断自己适不适合做程序员?这几个特点了解一下
查看>>
newinstance()和new有什么区别
查看>>
android下载封装类
查看>>
[node] 用 node-webkit 开发桌面应用
查看>>
Nginx访问控制和虚拟主机
查看>>
report widget not working for external users
查看>>
windows phone 摄像头得到图片是旋转90°
查看>>
Linux--sed使用
查看>>
没有显示器的情况下安装和使用树莓派
查看>>
【android】使用handler更新UI
查看>>
mochiweb 源码阅读(十五)
查看>>
前端面试中的常见的算法问题
查看>>
计算机语言的基本理论
查看>>
nodejs流之行读取器例子
查看>>
批量文件重命名工具
查看>>
简单说一下UWP中的JumpList
查看>>
unity将object[]或者string对象转换成枚举enum
查看>>