最近使用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();则报如上错误。
相关推荐
1. **测试目的**:在进行集成测试或单元测试时,可能需要模拟某些特定行为,此时使用无参数POST请求可以帮助简化测试过程。 2. **触发事件**:某些系统设计中,可能会有通过无参数POST请求来触发特定事件的需求,...
在给定的代码片段中,主要展示了如何使用Java中的Apache HttpClient库发送一个包含XML数据的POST请求,并接收响应。下面是对关键部分的详细分析: 1. **导入必要的库**:代码首先导入了处理网络请求、输入输出流...
3. **执行请求**:使用 `postForObject` 方法发送 POST 请求,其中第二个参数是请求体对象,第三个参数指定了返回类型为 `PostDTO` 类型。 4. **结果**:控制台会打印出从服务器返回的 JSON 字符串表示的 `PostDTO` ...
8. **执行请求并获取响应**:调用`execute()`方法发送POST请求并接收响应。 9. **处理响应内容**:通过响应实体获取输入流,从而读取服务器返回的数据。 10. **关闭资源**:确保所有打开的连接和资源都被正确关闭,...
发送POST请求通常涉及到传递参数或请求体。`RestTemplate`提供了`postForEntity`和`exchange`方法。假设我们需要发送JSON数据,可以这样做: ```java HttpHeaders headers = new HttpHeaders(); headers....
### Java HttpClient 发送GET请求和带有表单参数的POST请求详解 #### 一、概述 在Java编程中,处理HTTP请求是一项常见的需求,特别是在与Web服务进行交互时。Apache HttpClient库提供了一种强大的方法来执行HTTP...
总的来说,通过Spring Retry和`RestTemplate`的结合,我们可以实现对远程服务请求的智能重试,提高了系统在面对网络不稳定或服务短暂故障时的健壮性。这种机制对于提高应用的可靠性具有重要意义。
public static String post(String url, String params){ log.info("post url:" + url + " params:" + params); String responseStr = ""; try(CloseableHttpClient httpClient = HttpClients.createDefault()) {...
在使用HttpClient发送POST请求时,主要步骤如下: 1. 创建HttpClient实例:这是所有操作的基础,例如`CloseableHttpClient httpClient = HttpClients.createDefault();` 2. 构建HttpPost对象:`HttpPost httpPost ...
本教程将详细讲解如何在Gin中接收GET和POST请求的参数。 首先,我们需要引入Gin库。在`go.mod`文件中,确保你有以下依赖: ```go module example.com/gin_get_post go 1.14 require ( github....
如果您正在寻找一份JAVA客户端发送POST请求的示例代码,那么我们的资源库将为您提供一切所需。本资源库提供了一份完整的JAVA客户端发送POST请求的示例代码,可以帮助您快速了解如何使用JAVA客户端发送POST请求,同时...
如果你需要发送多个POST请求,可以维护一个`QNetworkAccessManager`实例,并为每个请求创建不同的`QNetworkRequest`和`QNetworkReply`对象。使用信号和槽机制来跟踪每个请求的状态。例如,你可以创建一个队列来存储...
Java开发案例-springboot-23-自定义注解实现post请求接收单个参数值-源代码+文档.rarJava开发案例-springboot-23-自定义注解实现post请求接收单个参数值-源代码+文档.rarJava开发案例-springboot-23-自定义注解实现...
当`RestTemplate`发送请求并收到非200状态码的响应时,它会触发异常。这是因为`RestTemplate`内部使用了`ResponseErrorHandler`接口来处理响应错误。默认实现`DefaultResponseErrorHandler`会检查响应的状态码,如果...
它允许开发者模拟GET和POST等HTTP请求,并可以方便地发送JSON等数据作为请求参数。在本文中,我们将深入探讨如何使用HttpClient进行HTTP请求操作,以及如何处理JSON数据。 首先,我们需要引入HttpClient的相关依赖...
本文将详细介绍如何使用C#中的`HttpWebRequest`来发送POST请求,并实现网站的自动登录。 #### 发送POST请求的基本步骤 1. **创建HttpRequest对象**:首先需要创建一个`HttpWebRequest`对象,并设置其URL地址。 2. ...
GET 和 POST 是我们最常用的两种请求方式,今天讲一讲如何在 golang 服务中,正确接收这两种请求的参数信息。 处理GET请求 1.1 接收GET请求 //接收GET请求 func Get(writer http.ResponseWriter , request *...
### 通过ORACLE的UTL_HTTP工具包发送包含POST参数的请求 #### 概述 在Oracle环境中,经常需要与外部系统进行交互,特别是在需要从Web服务器获取数据或向其发送数据的情况下。`UTL_HTTP`是Oracle提供的一款强大工具...
HTTP发送POST请求的工具类