使用RestTemplate发送post请求

最近使用RestTemplate发送post请求,遇到了很多问题,如转换httpMessage失败、中文乱码等,调了好久才找到下面较为简便的方法:

RestTemplate restTemplate = new RestTemplate();
        HttpHeaders headers = new HttpHeaders();
        MediaType type = MediaType.parseMediaType("application/json; charset=UTF-8");
        headers.setContentType(type);
        headers.add("Accept", MediaType.APPLICATION_JSON.toString());

        JSONObject jsonObj = JSONObject.fromObject(params);

        HttpEntity<String> formEntity = new HttpEntity<String>(jsonObj.toString(), headers);

        String result = restTemplate.postForObject(url, formEntity, String.class);

如果直接使用在postForObject中把对象传入很容易出现no suitable HttpMessageConverter found for request type的错误,建议直接先转成字符串,见jsonObj.otString(),
网上有人说设置RestTemplate的HttpMessageConverter,试了一下要引入各种包。
另外要注意中文编码问题,网上有人说StringHttpMessageConverter默认使用ISO-8859-1,要指定为UTF-8编码,自己尝试没有成功,最后通过指定contentType的方式解决了。

 

http://liuxing.info/2015/05/21/RestTemplate实践/

http://www.cnblogs.com/zemliu/archive/2013/07/28/3220517.html

 

 /**
        *
        * This is going to setup the REST server configuration in the applicationContext
        * you can see that I am using the new Spring's Java Configuration style and not some OLD XML file
        *
        */
       ApplicationContext context = new AnnotationConfigApplicationContext(RESTConfiguration.class);

       /**
        *
        * We now get a RESTServer bean from the ApplicationContext which has all the data we need to
        * log into the REST service with.
        *
        */
       RESTServer mRESTServer = context.getBean(RESTServer.class);

       /**
        *
        * Setting up BASIC Authentication access
        *
        */

        HttpClient client = new HttpClient();
       UsernamePasswordCredentials credentials =
               new UsernamePasswordCredentials(mRESTServer.getUser(), mRESTServer.getPassword());

       client.getState().setCredentials(
               new AuthScope(mRESTServer.getHost(), 8080, AuthScope.ANY_REALM),
               credentials);

       CommonsClientHttpRequestFactory commons = new CommonsClientHttpRequestFactory(client);

       /**
        *
        * Setting up data to be sent to REST service
        *
        */
       Map<String, String> vars = new HashMap<String, String>();
       vars.put("id", "INID");

       /**
        *
        * Doing the REST call and then displaying the data/user object
        *
        */
       try
       {

           /*

               This is code to post and return a user object

            */

           RestTemplate rt = new RestTemplate(commons); // Added the CommonsClientHttpRequestFactory

           rt.getMessageConverters().add(new MappingJacksonHttpMessageConverter());
           rt.getMessageConverters().add(new StringHttpMessageConverter());

           String uri = new String("http://" + mRESTServer.getHost() + ":8080/springmvc-resttemplate-auth-test/api/{id}");

           User u = new User();
           u.setName("Johnathan M Smith");
           u.setUser("JMS");

           User returns = rt.postForObject(uri, u, User.class, vars);

           LOGGER.debug("User:  " + u.toString());

https://github.com/JohnathanMarkSmith/springmvc-resttemplate-auth-test

        /**
         *
         * This is going to setup the REST server configuration in the applicationContext
         * you can see that I am using the new Spring's Java Configuration style and not some OLD XML file
         *
         */
        ApplicationContext context = new AnnotationConfigApplicationContext(RESTConfiguration.class);

        /**
         *
         * We now get a RESTServer bean from the ApplicationContext which has all the data we need to
         * log into the REST service with.
         *
         */
        RESTServer mRESTServer = context.getBean(RESTServer.class);

        /**
         *
         * Setting up data to be sent to REST service
         *
         */
        Map<String, String> vars = new HashMap<String, String>();
        vars.put("id", "JS01");

        /**
         *
         * Doing the REST call and then displaying the data/user object
         *
         */

        try
        {

            /*

                This is code to post and return a user object

             */

            RestTemplate rt = new RestTemplate();
            rt.getMessageConverters().add(new MappingJacksonHttpMessageConverter());
            rt.getMessageConverters().add(new StringHttpMessageConverter());

            String uri = new String("http://" + mRESTServer.getHost() + ":8080/springmvc-resttemplate-test/api/{id}");

            User u = new User();
            u.setName("Johnathan M Smith");
            u.setUser("JS01");

            User returns = rt.postForObject(uri, u, User.class, vars);
            LOGGER.debug("User:  " + u.toString());

https://github.com/JohnathanMarkSmith/springmvc-resttemplate-test

 

时间: 2024-11-18 00:10:13

使用RestTemplate发送post请求的相关文章

用.net 处理xmlHttp发送异步请求

xml|请求|异步 最近正在拜读<<Ajax in Action>>这本书,运用书中知识,结合.net,写了这篇用.net 处理xmlHttp发送异步请求的文章. 我们要达到的目的是点击按钮,获得服务器的当前时间,aspx的html如下:Html<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits=&qu

异步发送添加请求的客户端实现

在用户单击"添加RSS"按钮后,为了提高运行速度,本例将使用XMLHttpRequest实现数据的提交工作,异步功能实现的原理如图12-7所示. 图12-7 异步提交的原理图 实现的步骤如下: (1)打开Default.aspx页. (2)为"添加RSS"按钮添加click事件,事件调用方法"addrss". (3)在head元素内添加脚本代码,方法"addrss"的代码如清单12-4所示.其中需要创建一个XMLHttpReq

Java向Web站点发送POST请求

向一个Web站点发送POST请求只需要简单的几步: 首先要和URL下的URLConnection对话.URLConnection可以很容易的从URL得到.比如: // Using java.net.URL and //java.net.URLConnection URL url = new URL("http://jobsearch.dice.com/jobsearch/jobsearch.cgi"); URLConnection connection = url.openConnec

jsp+ajax发送GET请求的方法

 本文实例讲述了ajax发送GET请求,然后通过jsp页面来接收处理的实现方法.分享给大家供大家参考.具体实现方法如下: Ajax发送GET请求 这里用一个实例演示Ajax发送get请求,实例具体要求为一个注册页面,当用户填写完用户名称时,该输入框失去焦点后会通过Ajax向后台发送验证信息,如果用户名不是admin则通过验证,否则不通过验证. 下面先看JSP页面具体信息: 代码如下: <form action="servlet/LoginServlet" method="

python通过get,post方式发送http请求和接收http响应的方法

  本文实例讲述了python通过get,post方式发送http请求和接收http响应的方法.分享给大家供大家参考.具体如下: 测试用CGI,名字为test.py,放在apache的cgi-bin目录下: ? 1 2 3 4 5 6 7 8 9 10 #!/usr/bin/python import cgi def main(): print "Content-type: text/htmln" form = cgi.FieldStorage() if form.has_key(&q

ie发送ajax请求返回上一次结果的解决方法

 这篇文章主要介绍了ie发送ajax请求返回上一次结果的解决方法,需要的朋友可以参考下 问题出现原因:    1. ie下面只会建立一次 ajax 请求,将响应结果放在浏览器缓存里 下次调用该ajax请求时 从缓存里读取    get方式时,获取数据,因发送参数和地址都一致,故IE浏览器会从缓存中取,而不会去请求服务器端,而post方式因为参数的不同,不会产生这个问题    2. 火狐下面 每次激活事件 都会重新建立一次ajax请求    解决方法:    1: 在AJAX请求的页面后加个随机函

php发送post请求的三种方法

 这篇文章主要介绍了php发送post请求的三种方法,分别使用curl.file_get_content.fsocket来实现post提交数据,需要的朋友可以参考下  代码如下: class Request{       public static function post($url, $post_data = '', $timeout = 5){//curl           $ch = curl_init();           curl_setopt ($ch, CURLOPT_UR

php发送post请求函数分享

 这篇文章主要介绍了一个php发送post请求的函数,开发中经常会用到,需要的朋友可以参考下  代码如下: function do_post_request($url, $data, $optional_headers = null) {  $params = array('http' => array( 'method' => 'POST', 'content' => $data  ));  if ($optional_headers !== null) { $params['http

fiddler 怎么监听HttpClient发送的请求

问题描述 fiddler 怎么监听HttpClient发送的请求 我用HttpClient模拟浏览器发送请求,但是fiddler 好像监听不到 HttpClient 发送的请求我用的是eclipse 有人说 用fiddler 上的那个十字标点中eclipse就行,但是我点了 也没用,我监听全局 fiddler也监听不了 HttpClient的请求 解决方案 设置一下代理就行了httpClient.getHostConfiguration().setProxy(""127.0.0.1&q