`

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();则报如上错误。

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics