`

RestTemplate发送post请求时接收参数为空或报错

阅读更多

最近使用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请求

    1. **测试目的**:在进行集成测试或单元测试时,可能需要模拟某些特定行为,此时使用无参数POST请求可以帮助简化测试过程。 2. **触发事件**:某些系统设计中,可能会有通过无参数POST请求来触发特定事件的需求,...

    发送Post请求,内容格式为xml,并获取响应内容

    在给定的代码片段中,主要展示了如何使用Java中的Apache HttpClient库发送一个包含XML数据的POST请求,并接收响应。下面是对关键部分的详细分析: 1. **导入必要的库**:代码首先导入了处理网络请求、输入输出流...

    精讲RestTemplate,POST请求方法使用详解.docx

    3. **执行请求**:使用 `postForObject` 方法发送 POST 请求,其中第二个参数是请求体对象,第三个参数指定了返回类型为 `PostDTO` 类型。 4. **结果**:控制台会打印出从服务器返回的 JSON 字符串表示的 `PostDTO` ...

    https发送post请求

    8. **执行请求并获取响应**:调用`execute()`方法发送POST请求并接收响应。 9. **处理响应内容**:通过响应实体获取输入流,从而读取服务器返回的数据。 10. **关闭资源**:确保所有打开的连接和资源都被正确关闭,...

    java中使用restTemplate发送http请求

    发送POST请求通常涉及到传递参数或请求体。`RestTemplate`提供了`postForEntity`和`exchange`方法。假设我们需要发送JSON数据,可以这样做: ```java HttpHeaders headers = new HttpHeaders(); headers....

    java HttpClient 发送GET请求和带有表单参数的POST请求教程例子

    ### Java HttpClient 发送GET请求和带有表单参数的POST请求详解 #### 一、概述 在Java编程中,处理HTTP请求是一项常见的需求,特别是在与Web服务进行交互时。Apache HttpClient库提供了一种强大的方法来执行HTTP...

    RestTemplate请求失败自动重试机制.docx

    总的来说,通过Spring Retry和`RestTemplate`的结合,我们可以实现对远程服务请求的智能重试,提高了系统在面对网络不稳定或服务短暂故障时的健壮性。这种机制对于提高应用的可靠性具有重要意义。

    SpringBoot使用httpclient发送Post请求时

    public static String post(String url, String params){ log.info("post url:" + url + " params:" + params); String responseStr = ""; try(CloseableHttpClient httpClient = HttpClients.createDefault()) {...

    httpclient发送post请求

    在使用HttpClient发送POST请求时,主要步骤如下: 1. 创建HttpClient实例:这是所有操作的基础,例如`CloseableHttpClient httpClient = HttpClients.createDefault();` 2. 构建HttpPost对象:`HttpPost httpPost ...

    Go语言中的gin框架之GET/POST请求参数接收传值(五)

    本教程将详细讲解如何在Gin中接收GET和POST请求的参数。 首先,我们需要引入Gin库。在`go.mod`文件中,确保你有以下依赖: ```go module example.com/gin_get_post go 1.14 require ( github....

    JAVA发送POST请求,如何使用JAVA发送POST请求

    如果您正在寻找一份JAVA客户端发送POST请求的示例代码,那么我们的资源库将为您提供一切所需。本资源库提供了一份完整的JAVA客户端发送POST请求的示例代码,可以帮助您快速了解如何使用JAVA客户端发送POST请求,同时...

    Qt post请求发送和解析json数据完整示例,有完整的设置框架,可以发送和解析多个post请求

    如果你需要发送多个POST请求,可以维护一个`QNetworkAccessManager`实例,并为每个请求创建不同的`QNetworkRequest`和`QNetworkReply`对象。使用信号和槽机制来跟踪每个请求的状态。例如,你可以创建一个队列来存储...

    Java开发案例-springboot-23-自定义注解实现post请求接收单个参数值-源代码+文档.rar

    Java开发案例-springboot-23-自定义注解实现post请求接收单个参数值-源代码+文档.rarJava开发案例-springboot-23-自定义注解实现post请求接收单个参数值-源代码+文档.rarJava开发案例-springboot-23-自定义注解实现...

    精讲RestTemplate自定义请求失败异常处理.docx

    当`RestTemplate`发送请求并收到非200状态码的响应时,它会触发异常。这是因为`RestTemplate`内部使用了`ResponseErrorHandler`接口来处理响应错误。默认实现`DefaultResponseErrorHandler`会检查响应的状态码,如果...

    HttpClient模拟get,post请求并发送请求参数(json等)

    它允许开发者模拟GET和POST等HTTP请求,并可以方便地发送JSON等数据作为请求参数。在本文中,我们将深入探讨如何使用HttpClient进行HTTP请求操作,以及如何处理JSON数据。 首先,我们需要引入HttpClient的相关依赖...

    C#实现通过HttpWebRequest发送POST请求实现网站自动登陆

    本文将详细介绍如何使用C#中的`HttpWebRequest`来发送POST请求,并实现网站的自动登录。 #### 发送POST请求的基本步骤 1. **创建HttpRequest对象**:首先需要创建一个`HttpWebRequest`对象,并设置其URL地址。 2. ...

    GO接收GET/POST参数及发送GET/POST请求的实例详解

    GET 和 POST 是我们最常用的两种请求方式,今天讲一讲如何在 golang 服务中,正确接收这两种请求的参数信息。 处理GET请求 1.1 接收GET请求 //接收GET请求 func Get(writer http.ResponseWriter , request *...

    C#的http发送post和get请求源码

    使用`HttpClient`发送POST请求时,先创建一个`MultipartFormDataContent`或`StringContent`对象,将要发送的数据添加到其中,然后调用`PostAsync`方法。传入URL和创建的内容对象,同样返回一个`Task...

    通过ORACLE的UTL_HTTP工具包发送包含POST参数的请求

    ### 通过ORACLE的UTL_HTTP工具包发送包含POST参数的请求 #### 概述 在Oracle环境中,经常需要与外部系统进行交互,特别是在需要从Web服务器获取数据或向其发送数据的情况下。`UTL_HTTP`是Oracle提供的一款强大工具...

Global site tag (gtag.js) - Google Analytics