GET方式,参数必须放在URL后面,http://xxx/list?name={name}&age={age}

package com.chelizi.xiruo.xframework.util;

import net.sf.json.JSONObject;
import org.springframework.http.*;
import org.springframework.http.client.SimpleClientHttpRequestFactory;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.oauth2.provider.authentication.OAuth2AuthenticationDetails;
import org.springframework.web.client.DefaultResponseErrorHandler;
import org.springframework.web.client.RestTemplate; import java.util.Arrays;
import java.util.Map;
import java.util.Set; /**
* RestTemplate请求工具类
* Created by huangbaidong
* 2017/10/22.
*/
public class RestTemplateRequestUtil { /**
* GET请求
* @param url
* @param params
* @param clazz
* @param <T>
* @return
*/
public static <T> T getRequest(String url, Map<String, Object> params, Class<T> clazz) {
return request(url, params, clazz, HttpMethod.GET);
} /**
* POST请求
* @param url
* @param params
* @param clazz
* @param <T>
* @return
*/
public static <T> T postRequest(String url, Map<String, Object> params, Class<T> clazz) {
return request(url, params, clazz, HttpMethod.POST);
} /**
* restTemplate请求,
* 默认设置了连接超时,请求超时时间
* @param url 请求地址
* @param params 请求参数
* @param clazz 返回结果类型
* @param <T>
* @return
*/
public static <T> T request(String url, Map<String, Object> params, Class<T> clazz, HttpMethod method) {
return request(url, params, clazz, method,30000, 20000);
} /**
* restTemplate请求
* @param url 请求地址
* @param params 请求参数
* @param clazz 返回结果类型
* @param readTimeout 请求响应超时时间
* @param connectTimeout 连接超时时间
* @param <T>
* @return
*/
public static <T> T request(String url, Map<String, Object> params, Class<T> clazz,
HttpMethod method,int readTimeout, int connectTimeout) { RestTemplate restTemplate = new RestTemplate(); //设置连接参数
SimpleClientHttpRequestFactory requestFactory = new SimpleClientHttpRequestFactory();
requestFactory.setReadTimeout(readTimeout);
requestFactory.setConnectTimeout(connectTimeout);
restTemplate.setRequestFactory(requestFactory);
restTemplate.setErrorHandler(new DefaultResponseErrorHandler()); //拿到access_toeken
OAuth2AuthenticationDetails details = (OAuth2AuthenticationDetails) SecurityContextHolder.getContext().getAuthentication().getDetails(); //请求头
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
headers.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));
headers.add("Authorization", "bearer "+details.getTokenValue()); //发起请求
ResponseEntity<T> responseEntity = null;
if(HttpMethod.POST.equals(method)) {
JSONObject jsonParams = JSONObject.fromObject(params);
HttpEntity<JSONObject> requestEntity = new HttpEntity<JSONObject>(jsonParams, headers);
responseEntity = restTemplate.exchange(url, method, requestEntity, clazz);
} else {
HttpEntity requestEntity = new HttpEntity(null, headers);
responseEntity = restTemplate.exchange(appendParams(url, params.keySet()), method, requestEntity, clazz, params);
}
return responseEntity.getBody();
} /**
* 将参数追加到URL后边
* @param url
* @param keys
* @return
* @author: huangbaidong
* @Description: TODO
* @return: String
*/
private static String appendParams(String url, Set<?> keys) {
StringBuilder sb = new StringBuilder(url);
if(url.contains("?")) {
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();
} }

RestTemplate异常no suitable HttpMessageConverter found for request type [java.lang.Integer]的更多相关文章

  1. no suitable HttpMessageConverter found for request type [java.lang.Integer]

    今天在使用Spring Template的时候遇到了这个异常: no suitable HttpMessageConverter found for request type [java.lang.I ...

  2. Validation异常:No validator could be found for constraint '.....' validating type 'java.lang.Integer'.

    javax.validation.UnexpectedTypeException: HV000030: No validator could be found for constraint 'java ...

  3. Java 异常 Failed to convert property value of type 'java.lang.String' to required type 'java.util.Date'

    查询时发送给服务器的日期的字符串格式:yyyy-MM-dd HH:mm:ss 服务器接收到日期的字符串之后,向 MySQL 数据库发起查询时,因为没有指定日期时间格式,导致字符串数据不能正确地转换为日 ...

  4. no suitable HttpMessageConverter found for response type

    在使用 RestTemplate 或者 Spring Cloud 的时候,经常会出现这个错误. 基本上出现的场景都是,我们要json,结果来了个 text/html. 两个原因: 第一个就是:服务器返 ...

  5. 关于jstl中碰到的Property 'username' not found on type java.lang.String异常

    在jstl的forEach循环的时候总是有异常,刚开始以为是把类的属性名打错了,因为显示的是Property not found,但就算从类文件里面复制属性名过来依然显示的是Property not ...

  6. Struts2环境下Tomcat启动异常:Exception starting filter struts2,报了一个java.lang.ClassNotFoundException

    在写一个struts2+hibernate整合的小例子时,启动Tomcat服务器,报了一个: 严重: Exception starting filter struts2java.lang.ClassN ...

  7. Java EE之Struts2异常[No mapping found for dependency [type=java.lang.String, name='actionPackages'#java.lang.RuntimeException]【摘抄】

    本博文摘自:http://www.blogjava.net/nkjava/archive/2009/03/29/262705.html 出现这个问题,可能是添加了struts2-codebehind包 ...

  8. MySQL分段统计SQL写法 与 Mybatis 异常 java.math.BigDecimal cannot be cast to java.lang.Integer

    mysql> select end) as '<60', end) as '60~69', end) as '70~79', end) as '80~89', end) as '>= ...

  9. 【java异常】Unexpected error occurred in scheduled task. java.lang.StackOverflowError: null

    可能是栈溢出(StackOverFlow) 背景:我用定时器new东西 原因:频率太快了好像!

随机推荐

  1. css段落首字母下沉

    摘要: 段落首字母放大是指放大段落开头的字母或者汉字,主要使用了css的first-letter伪类选择器. 单行放大: 在第一行内放大,效果如下: <!DOCTYPE html> < ...

  2. jquery获取元素颜色css('color')的值返回RGB

    css代码如下: a, a:link, a:visited { color:#4188FB; } a:active, a:focus, a:hover { color:#FFCC00; } js代码如 ...

  3. 定时器Enable Disable控制

    问题:定时器如何控制它一会可用一会不可用,根据某个业务需求,比如:一个控制台程序扫描表中某个条件的数据,处理数据,控制台分布式部署,当主机宕机后,从机扫描定时器需要可用,当主机复活后,从机的扫描定时器 ...

  4. RF-For循环使用

    场景1:

  5. 系统日志:/var/log/messages

    /var/log/messages 存放的是系统的日志信息,它记录了各种事件,基本上什么应用都能往里写日志,在做故障诊断时可以首先查看该文件内容 [root@mirh5_center1_111.231 ...

  6. Apache Kafka 1.0.0正式发布!

    千呼万唤始出来,经过7年的发展与完善,Apache Kafka 1.0.0正式发布!在笔者看来,比起1.0.0引入的新功能,此版本最大的意义在于标识Kafka各种组件功能的稳定性.不过我们还是来看下1 ...

  7. mac 卸载idea

    卸载MAC中的IDEA Intellij 首先在应用里面右键移动到垃圾桶 然后使用命令行: cd Users/xxx/Library/ 上面的xxx对应你的用户名,然后输入 rm -rf Logs/I ...

  8. mybatis 之 resultType="Integer"

    public class EcPromoteRuleAdditionalNew extends BaseBO { private String[] promoteRuleIds; public Str ...

  9. PyQt4显示提示信息

    我们可以为任何窗口部件设置一个气球提示. #!/usr/bin/python # -*- coding:utf-8 -*- import sys from PyQt4 import QtGui fro ...

  10. C++多线程编程简单实例

    C++本身并没有提供任何多线程机制,但是在windows下,我们可以调用SDK win32 api来编写多线程的程序,下面就此简单的讲一下: 创建线程的函数 HANDLE CreateThread( ...