最近使用RestTemplate发送post请求,遇到了很多问题,在使用get方式提交时另外一方能正常获取数据,而post就不行。贴出代码,还请大神帮忙解答下,不胜感激。
package joinpayTest; import java.net.URISyntaxException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.impl.conn.PoolingHttpClientConnectionManager; import org.springframework.http.MediaType; import org.springframework.http.client.HttpComponentsClientHttpRequestFactory; import org.springframework.http.converter.HttpMessageConverter; import org.springframework.web.client.RestTemplate; import com.alibaba.fastjson.serializer.SerializerFeature; import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter; public class ResttemplateTest { private static final String joinpayTradeUrl = "http://localhost:8081/gw-web-trade"; public static void main(String... args) throws URISyntaxException { //getData(); postData(); } //getForObject方式 private static void getData() { RestTemplate restTemplate = getRestTemplate(); String paramsUrl = "&bs1_MerchantNo={bs1_MerchantNo}"; String url = joinpayTradeUrl + "/getFrozenInfo.action?1=1" + paramsUrl; Map<String, String> paramMap = new HashMap<String, String>(); paramMap.put("bs1_MerchantNo", "1888000000000000"); String resultStr = restTemplate.getForObject(url, String.class, paramMap); System.out.println(resultStr); } //postForObject private static void postData(){ RestTemplate restTemplate = getRestTemplate(); String url = joinpayTradeUrl + "/getFrozenInfo.action?1=1"; Map<String, Object> paramMap = new HashMap<String, Object>(); paramMap.put("bs1_MerchantNo", "1888000000000000"); // String msg = JSONObject.toJSONString(paramMap); // String resultStr = restTemplate.postForObject(url, msg, String.class); String resultStr = restTemplate.postForObject(url,null, String.class,paramMap); System.out.println(resultStr); } private static RestTemplate getRestTemplate() { int poolSize = 4; PoolingHttpClientConnectionManager connMgr = new PoolingHttpClientConnectionManager(); connMgr.setMaxTotal(poolSize + 1); connMgr.setDefaultMaxPerRoute(poolSize); CloseableHttpClient httpClient = HttpClients.custom().setConnectionManager(connMgr).build(); RestTemplate template = new RestTemplate(new HttpComponentsClientHttpRequestFactory(httpClient)); List<HttpMessageConverter<?>> converters = new ArrayList<HttpMessageConverter<?>>(); FastJsonHttpMessageConverter fastjson = new FastJsonHttpMessageConverter(); fastjson.setFeatures(SerializerFeature.WriteClassName, SerializerFeature.BrowserCompatible, SerializerFeature.DisableCircularReferenceDetect); List<MediaType> supportedMediaTypes = new ArrayList<>(); supportedMediaTypes.add(MediaType.valueOf("application/json;charset=UTF-8")); //supportedMediaTypes.add(MediaType.valueOf("text/html;charset=UTF-8")); fastjson.setSupportedMediaTypes(supportedMediaTypes); converters.add(fastjson); template.setMessageConverters(converters); return template; } }
在post时设置类型application/json,会报如下错误:
Exception in thread "main" org.springframework.web.client.RestClientException: Could not extract response: no suitable HttpMessageConverter found for response type [class java.lang.String] and content type [text/html;charset=UTF-8]
at org.springframework.web.client.HttpMessageConverterExtractor.extractData(HttpMessageConverterExtractor.java:109)
at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:599)
at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:565)
at org.springframework.web.client.RestTemplate.postForObject(RestTemplate.java:367)
at joinpayTest.ResttemplateTest.postData(ResttemplateTest.java:52)
at joinpayTest.ResttemplateTest.main(ResttemplateTest.java:26)
在post时使用RestTemplate restTemplate = new RestTemplate();时,传过去的参数都是空,如果用写好的RestTemplate restTemplate = getRestTemplate();则报如上错误。
相关推荐
发送Post请求,内容格式为xml,并获取响应内容
使用过时无参post请求,现在gradle里添加依赖
https发送post请求,并接收响应信息。
其实POST请求方法和GET请求方法上大同小异,RestTemplate的POST请求也包含两个主要方法: postForObject() postForEntity() 二者的主要区别在于,postForObject()返回值是HTTP协议的响应体。postForEntity()返回...
java中使用restTemplate发送http请求,内涵post和get方法,单例模式,开箱即用
public static String post(String url, String params){ log.info("post url:" + url + " params:" + params); String responseStr = ""; try(CloseableHttpClient httpClient = HttpClients.createDefault()) {...
java HttpClient 发送GET请求和带有表单参数的POST请求教程例子
在RestTemplate发送请求得到非200状态结果的时候,间隔一定的时间再次发送n次请求。n次请求都失败之后,最后抛出HttpClientErrorException。 在开始本节代码之前,将上一节的RestTemplate自定义异常处理的代码注释掉...
如果您正在寻找一份JAVA客户端发送POST请求的示例代码,那么我们的资源库将为您提供一切所需。本资源库提供了一份完整的JAVA客户端发送POST请求的示例代码,可以帮助您快速了解如何使用JAVA客户端发送POST请求,同时...
一个发送POST请求的三种方式的php类,PHP发送POST请求的三种方式 分别使用curl file_get_content fsocket 来实现post提交数据。
首先我要说一个结论:RestTemplate请求结果异常是可以自定义处理的。在开始进行自定义的异常处理逻辑之前,我们有必要看一下异常处理的默认实现。也就是:为什么会产生上面小节提到的现象? ResponseErrorHandler...
GET 和 POST 是我们最常用的两种请求方式,今天讲一讲如何在 golang 服务中,正确接收这两种请求的参数信息。 处理GET请求 1.1 接收GET请求 //接收GET请求 func Get(writer http.ResponseWriter , request *...
HTTP发送POST请求的工具类
详解使用fetch发送post请求时的参数处理 不考虑古董浏览器之后,使用fetch来发送ajax请求,变得非常爽快和时尚。 但是,发送post请求的时候,把笔者卡了一下。后台如下获取参数时,总是为null String q = req....
通常前端通过POST请求向服务器端提交数据格式有4中,分别是”application/x-www-form-urlencoded”格式、” multipart/form-data”格式、”application/json”格式和”text/xml”格式。通常最常见的是”application/...
本文详解说明了RestTemplate post传递参数时报错的问题及其原由,需要的朋友可以参考下
Qt post请求发送和解析json数据完整示例,有完整的设置框架,可以发送和解析多个post请求
通过ORACLE的UTL_HTTP工具包发送包含POST参数的请求,包含完成的原创代码、测试说明、相关文档,希望对您的学习有帮助。
其中包含项目post-demo定义接口;包含另一个项目httpclient-demo使用工具类发送post请求调用接口。详细内容查看博客 httpclient发送post请求
C#实现通过HttpWebRequest发送POST请求实现网站自动登陆