import org.springframework.web.client.RestTemplate; 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 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; public class RestTemplateUtil { 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 ex) { ex.printStackTrace(); } } } /** * @param url * @param params * @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; } /** * 将参数都拼接在url之后 * * @param url * @param params * @param mediaType * @return: String */ public static String post(String url, JSONObject params, MediaType mediaType) { RestTemplate restTemplate = new RestTemplate(); HttpHeaders requestHeaders = new HttpHeaders(); requestHeaders.setContentType(mediaType); HttpEntity<JSONObject> requestEntity = (mediaType == MediaType.APPLICATION_JSON || mediaType == MediaType.APPLICATION_JSON_UTF8) ? new HttpEntity<JSONObject>(params, requestHeaders) : new HttpEntity<JSONObject>(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; } /** * 发送json或者form格式数据 * * @param url * @param params * @param mediaType * @param clz * @return: String */ public static <T> T post(String url, JSONObject params, MediaType mediaType, Class<T> clz) { RestTemplate restTemplate = new RestTemplate(); restTemplate.getMessageConverters().add(new FormHttpMessageConverter()); HttpHeaders requestHeaders = new HttpHeaders(); requestHeaders.setContentType(mediaType); HttpEntity<?> requestEntity = (mediaType == MediaType.APPLICATION_JSON || mediaType == MediaType.APPLICATION_JSON_UTF8) ? new HttpEntity<JSONObject>(params, requestHeaders) : (mediaType == MediaType.APPLICATION_FORM_URLENCODED ? new HttpEntity<MultiValueMap<String, String>>(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; } @SuppressWarnings("unchecked") private static MultiValueMap<String, String> createMultiValueMap(JSONObject params) { MultiValueMap<String, String> map = new LinkedMultiValueMap<String, String>(); for (String key : params.keySet()) { if (params.get(key) instanceof List) { for (Iterator<String> it = ((List<String>) 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 * @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()) { if (!url.contains("?") && !url.endsWith("?")) { sb.append("?"); } else { 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(); } }
相关推荐
NULL 博文链接:https://zhaoshijie.iteye.com/blog/1711170
SpringMVC可以用的工具类,对初学者有点帮助,资源应该还不全面我也是刚接触后面了解后再补充
postman springmvc 辅助工具
SpringMVC 常用注解类,视频讲解,带课程文档。SpringMVC 常用注解类
本文主要目的是记录自己基于SpringMVC实现的文件上传和下载的工具类的编写,代码经过测试可以直接运行在以后的项目中。开发的主要思路是对上传和下载文件进行抽象,把上传和下载的核心功能抽取出来分装成类。
今天小编就为大家分享一篇springMVC中RestTemplate传值接值方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
java SpringMVC动态数据源的DataSource工具类,springmvc中配置数据源为工具类中的数据源,多线程使用不同数据源配置
spring集成memcached
Springmvc+poi 实现导入导出excel的controller方法和工具类
使用注解SpringMVC从页面导出Excel和word文档的使用的jar包——使用ExportExcel工具类
Excel工具类 Word工具类 Java NIO实现socket工具类 分布式session jdk升级到1.7 嵌入式redis服务(只支持linux) 1.0.13 修改默认的beanName生成策略,controller参数扩展 1.0.14 分布式session使用zookeeper 1.0.15 ...
执行自动将数据库的表转化了类
spring 开发的所有包 包含了 springmvc 该包版本是最新的 版本为4.3.9 aop的包也是全部有 spring 开发的所有包 包含了 springmvc 该包版本是最新的 版本为4.3.9 aop的包也是全部有
SpringMVC4.0完整工具类数据包,Eclipse和MyEclipse环境下都可以使用。
多个进程或线程同时(或着说在同一段时间内)访问同一资源会产生并发问题。
elipse下的仅仅支持mysql数据库 的 springMvc 代码生成工具
SpringMVC文件上传Demo代码
springmvc是常用的一种框架,学习springmvc非常重要,故需要良好教程资料
spring+springMvc+mybatis完美整合项目,内含数据库相关文件,导入即可运行,如有疑问请留意。
redis工具类,整合springmvc,用来操作redis,获取数据的工具类,包括初始化和具体操作