初探RestTemplate--postForObject方法直接传递对象

1.我们通过 http://start.spring.io/ 初始化一个简单的spring boot工程,取名 resttemplate, 由于只研究RestTemplate的特性,故仅添加web即可,如图所示,另外本项目额外添加了alibaba.fastjson这个jar包,你需要在pom.xml添加依赖

<!--阿里 FastJson依赖-->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.39</version>
</dependency>
2 .将项目导入后,稍微修改下配置文件改改端口号,在 application.properties文件中添加   server.port = 9999 (你也可以不改,请随意即可~~),下面我们直接贴代码:
2.1用于传递参数的实体JavaBean
public class RequestObject {
    private int age;
    private String name;
    private String address;
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getAddress() {
        return address;
    }
    public void setAddress(String address) {
        this.address = address;
    }
    @Override
    public String toString() {
        return "RequestObject [age=" + age + ", name=" + name + ", address=" + address + "]";
    }
}

 2.2编写用于测试的controller,下面三个方法分别测试以JavaBean,Map和JSON对象的格式来接收参数

@RestController
@RequestMapping("/user")
public class TestController {
    @RequestMapping(value = "/object", method = RequestMethod.POST)
    public String postByObject(@RequestBody RequestObject beanRequest) {
        if (beanRequest == null) {
            return "FAIL";
        }
        return "SUCCESS:" + beanRequest.toString();
    }
    @RequestMapping(value = "/map", method = RequestMethod.POST)
    public String postByMap(@RequestBody Map<String, Object> map) {
        if (map == null || map.isEmpty()) {
            return "FAIL";
        }
        return "SUCCESS:" + map.toString();
    }
    @RequestMapping(value = "/json", method = RequestMethod.POST)
    public String postByJsonObj(@RequestBody JSONObject jsonRequest) {
        if (jsonRequest == null || jsonRequest.isEmpty()) {
            return "FAIL";
        }
        return "SUCCESS:" + jsonRequest.toString();
    }
}

2.3编写简单的工具类初始化RestTemplate对象

public class RestTemplateUtil {


    /**
     * 创建指定字符集的RestTemplate
     *
     * @param charset
     * @return
     */
    public static RestTemplate getInstance(String charset) {
        RestTemplate restTemplate = new RestTemplate();
        restTemplate.getMessageConverters().add(new StringHttpMessageConverter(Charset.forName(charset)));
        return restTemplate;
    }

}

2.4编写单元测试类ResttemplateApplicationTests,并添加以下代码

public class ResttemplateApplicationTests {
    @Test
    public void testJavaObj() {
        RequestObject request = new RequestObject();
        request.setAge(18);
        request.setName("小芳");
        request.setAddress("广东深圳");
        RestTemplate restTemplate = RestTemplateUtil.getInstance("utf-8");
        String url = "http://localhost:9999/test/object";
//        String url = "http://localhost:9999/test/map";
//        String url = "http://localhost:9999/test/json";
        String result = restTemplate.postForObject(url, request, String.class);
        System.out.println(result);
    }

    @Test
    public void testMap() {
        Map<String, Object> hashMap = new HashMap<String, Object>();
        hashMap.put("age", 18);
        hashMap.put("name", "小芳");
        hashMap.put("address", "广东深圳");
        RestTemplate restTemplate = RestTemplateUtil.getInstance("utf-8");
//        String url = "http://localhost:9999/test/object";
        String url = "http://localhost:9999/test/map";
//        String url = "http://localhost:9999/test/json";
        String result = restTemplate.postForObject(url, hashMap, String.class);
        System.out.println(result);
    }

    @Test
    public void testJson() {
        JSONObject json = new JSONObject();
        json.put("age", 18);
        json.put("name", "小芳");
        json.put("address", "广东深圳");
        RestTemplate restTemplate = RestTemplateUtil.getInstance("utf-8");
//        String url = "http://localhost:9999/test/object";
//        String url = "http://localhost:9999/test/map";
        String url = "http://localhost:9999/test/json";
        String result = restTemplate.postForObject(url, json, String.class);
        System.out.println(result);
    }
}

3.启动Application,然后运行ResttemplateApplicationTests测试类,你将发现三个请求均发送成功,控制台依次打印了成功信息。

"D:\Program Files\Java\jdk1.8.0_121\bin\java" -ea -Didea.test.cyclic.buffer.size=1048576 "-javaagent:D:\Program Files\JetBrains\IntelliJ IDEA 2017.2.6\lib\idea_rt.jar=10098:D:\Program Files\JetBrains\IntelliJ IDEA 2017.2.6\bin" -Dfile.encoding=UTF-8 -classpath "D:\Program Files\JetBrains\IntelliJ IDEA 2017.2.6\lib\idea_rt.jar;D:\Program Files\JetBrains\IntelliJ IDEA 2017.2.6\plugins\junit\lib\junit-rt.jar;D:\Program Files\JetBrains\IntelliJ IDEA 2017.2.6\plugins\junit\lib\junit5-rt.jar;D:\Program Files\Java\jdk1.8.0_121\jre\lib\charsets.jar;D:\Program Files\Java\jdk1.8.0_121\jre\lib\deploy.jar;D:\Program Files\Java\jdk1.8.0_121\jre\lib\ext\access-bridge-64.jar;D:\Program Files\Java\jdk1.8.0_121\jre\lib\ext\cldrdata.jar;D:\Program Files\Java\jdk1.8.0_121\jre\lib\ext\dnsns.jar;D:\Program Files\Java\jdk1.8.0_121\jre\lib\ext\jaccess.jar;D:\Program Files\Java\jdk1.8.0_121\jre\lib\ext\jfxrt.jar;D:\Program Files\Java\jdk1.8.0_121\jre\lib\ext\localedata.jar;D:\Program Files\Java\jdk1.8.0_121\jre\lib\ext\nashorn.jar;D:\Program Files\Java\jdk1.8.0_121\jre\lib\ext\sunec.jar;D:\Program Files\Java\jdk1.8.0_121\jre\lib\ext\sunjce_provider.jar;D:\Program Files\Java\jdk1.8.0_121\jre\lib\ext\sunmscapi.jar;D:\Program Files\Java\jdk1.8.0_121\jre\lib\ext\sunpkcs11.jar;D:\Program Files\Java\jdk1.8.0_121\jre\lib\ext\zipfs.jar;D:\Program Files\Java\jdk1.8.0_121\jre\lib\javaws.jar;D:\Program Files\Java\jdk1.8.0_121\jre\lib\jce.jar;D:\Program Files\Java\jdk1.8.0_121\jre\lib\jfr.jar;D:\Program Files\Java\jdk1.8.0_121\jre\lib\jfxswt.jar;D:\Program Files\Java\jdk1.8.0_121\jre\lib\jsse.jar;D:\Program Files\Java\jdk1.8.0_121\jre\lib\management-agent.jar;D:\Program Files\Java\jdk1.8.0_121\jre\lib\plugin.jar;D:\Program Files\Java\jdk1.8.0_121\jre\lib\resources.jar;D:\Program Files\Java\jdk1.8.0_121\jre\lib\rt.jar;D:\ideas\spring-boot-api-project-seed-master\target\test-classes;D:\ideas\spring-boot-api-project-seed-master\target\classes;C:\Users\usher\.m2\repository\org\springframework\boot\spring-boot-starter-web\1.5.7.RELEASE\spring-boot-starter-web-1.5.7.RELEASE.jar;C:\Users\usher\.m2\repository\org\springframework\boot\spring-boot-starter\1.5.7.RELEASE\spring-boot-starter-1.5.7.RELEASE.jar;C:\Users\usher\.m2\repository\org\springframework\boot\spring-boot\1.5.7.RELEASE\spring-boot-1.5.7.RELEASE.jar;C:\Users\usher\.m2\repository\org\springframework\boot\spring-boot-starter-logging\1.5.7.RELEASE\spring-boot-starter-logging-1.5.7.RELEASE.jar;C:\Users\usher\.m2\repository\ch\qos\logback\logback-classic\1.1.11\logback-classic-1.1.11.jar;C:\Users\usher\.m2\repository\ch\qos\logback\logback-core\1.1.11\logback-core-1.1.11.jar;C:\Users\usher\.m2\repository\org\slf4j\jcl-over-slf4j\1.7.25\jcl-over-slf4j-1.7.25.jar;C:\Users\usher\.m2\repository\org\slf4j\jul-to-slf4j\1.7.25\jul-to-slf4j-1.7.25.jar;C:\Users\usher\.m2\repository\org\slf4j\log4j-over-slf4j\1.7.25\log4j-over-slf4j-1.7.25.jar;C:\Users\usher\.m2\repository\org\yaml\snakeyaml\1.17\snakeyaml-1.17.jar;C:\Users\usher\.m2\repository\org\springframework\boot\spring-boot-starter-tomcat\1.5.7.RELEASE\spring-boot-starter-tomcat-1.5.7.RELEASE.jar;C:\Users\usher\.m2\repository\org\apache\tomcat\embed\tomcat-embed-core\8.5.20\tomcat-embed-core-8.5.20.jar;C:\Users\usher\.m2\repository\org\apache\tomcat\embed\tomcat-embed-el\8.5.20\tomcat-embed-el-8.5.20.jar;C:\Users\usher\.m2\repository\org\apache\tomcat\embed\tomcat-embed-websocket\8.5.20\tomcat-embed-websocket-8.5.20.jar;C:\Users\usher\.m2\repository\org\hibernate\hibernate-validator\5.3.5.Final\hibernate-validator-5.3.5.Final.jar;C:\Users\usher\.m2\repository\javax\validation\validation-api\1.1.0.Final\validation-api-1.1.0.Final.jar;C:\Users\usher\.m2\repository\org\jboss\logging\jboss-logging\3.3.1.Final\jboss-logging-3.3.1.Final.jar;C:\Users\usher\.m2\repository\com\fasterxml\classmate\1.3.4\classmate-1.3.4.jar;C:\Users\usher\.m2\repository\com\fasterxml\jackson\core\jackson-databind\2.8.10\jackson-databind-2.8.10.jar;C:\Users\usher\.m2\repository\com\fasterxml\jackson\core\jackson-annotations\2.8.0\jackson-annotations-2.8.0.jar;C:\Users\usher\.m2\repository\com\fasterxml\jackson\core\jackson-core\2.8.10\jackson-core-2.8.10.jar;C:\Users\usher\.m2\repository\org\springframework\spring-web\4.3.11.RELEASE\spring-web-4.3.11.RELEASE.jar;C:\Users\usher\.m2\repository\org\springframework\spring-aop\4.3.11.RELEASE\spring-aop-4.3.11.RELEASE.jar;C:\Users\usher\.m2\repository\org\springframework\spring-beans\4.3.11.RELEASE\spring-beans-4.3.11.RELEASE.jar;C:\Users\usher\.m2\repository\org\springframework\spring-context\4.3.11.RELEASE\spring-context-4.3.11.RELEASE.jar;C:\Users\usher\.m2\repository\org\springframework\spring-webmvc\4.3.11.RELEASE\spring-webmvc-4.3.11.RELEASE.jar;C:\Users\usher\.m2\repository\org\springframework\spring-expression\4.3.11.RELEASE\spring-expression-4.3.11.RELEASE.jar;C:\Users\usher\.m2\repository\org\springframework\boot\spring-boot-starter-jdbc\1.5.7.RELEASE\spring-boot-starter-jdbc-1.5.7.RELEASE.jar;C:\Users\usher\.m2\repository\org\apache\tomcat\tomcat-jdbc\8.5.20\tomcat-jdbc-8.5.20.jar;C:\Users\usher\.m2\repository\org\apache\tomcat\tomcat-juli\8.5.20\tomcat-juli-8.5.20.jar;C:\Users\usher\.m2\repository\org\springframework\spring-jdbc\4.3.11.RELEASE\spring-jdbc-4.3.11.RELEASE.jar;C:\Users\usher\.m2\repository\org\springframework\spring-tx\4.3.11.RELEASE\spring-tx-4.3.11.RELEASE.jar;C:\Users\usher\.m2\repository\org\springframework\boot\spring-boot-starter-test\1.5.7.RELEASE\spring-boot-starter-test-1.5.7.RELEASE.jar;C:\Users\usher\.m2\repository\org\springframework\boot\spring-boot-test\1.5.7.RELEASE\spring-boot-test-1.5.7.RELEASE.jar;C:\Users\usher\.m2\repository\org\springframework\boot\spring-boot-test-autoconfigure\1.5.7.RELEASE\spring-boot-test-autoconfigure-1.5.7.RELEASE.jar;C:\Users\usher\.m2\repository\com\jayway\jsonpath\json-path\2.2.0\json-path-2.2.0.jar;C:\Users\usher\.m2\repository\net\minidev\json-smart\2.2.1\json-smart-2.2.1.jar;C:\Users\usher\.m2\repository\net\minidev\accessors-smart\1.1\accessors-smart-1.1.jar;C:\Users\usher\.m2\repository\org\ow2\asm\asm\5.0.3\asm-5.0.3.jar;C:\Users\usher\.m2\repository\org\slf4j\slf4j-api\1.7.25\slf4j-api-1.7.25.jar;C:\Users\usher\.m2\repository\junit\junit\4.12\junit-4.12.jar;C:\Users\usher\.m2\repository\org\assertj\assertj-core\2.6.0\assertj-core-2.6.0.jar;C:\Users\usher\.m2\repository\org\mockito\mockito-core\1.10.19\mockito-core-1.10.19.jar;C:\Users\usher\.m2\repository\org\objenesis\objenesis\2.1\objenesis-2.1.jar;C:\Users\usher\.m2\repository\org\hamcrest\hamcrest-core\1.3\hamcrest-core-1.3.jar;C:\Users\usher\.m2\repository\org\hamcrest\hamcrest-library\1.3\hamcrest-library-1.3.jar;C:\Users\usher\.m2\repository\org\skyscreamer\jsonassert\1.4.0\jsonassert-1.4.0.jar;C:\Users\usher\.m2\repository\com\vaadin\external\google\android-json\0.0.20131108.vaadin1\android-json-0.0.20131108.vaadin1.jar;C:\Users\usher\.m2\repository\org\springframework\spring-core\4.3.11.RELEASE\spring-core-4.3.11.RELEASE.jar;C:\Users\usher\.m2\repository\org\springframework\spring-test\4.3.11.RELEASE\spring-test-4.3.11.RELEASE.jar;C:\Users\usher\.m2\repository\commons-codec\commons-codec\1.10\commons-codec-1.10.jar;C:\Users\usher\.m2\repository\org\apache\commons\commons-lang3\3.6\commons-lang3-3.6.jar;C:\Users\usher\.m2\repository\com\google\guava\guava\23.0\guava-23.0.jar;C:\Users\usher\.m2\repository\com\google\code\findbugs\jsr305\1.3.9\jsr305-1.3.9.jar;C:\Users\usher\.m2\repository\com\google\errorprone\error_prone_annotations\2.0.18\error_prone_annotations-2.0.18.jar;C:\Users\usher\.m2\repository\com\google\j2objc\j2objc-annotations\1.1\j2objc-annotations-1.1.jar;C:\Users\usher\.m2\repository\org\codehaus\mojo\animal-sniffer-annotations\1.14\animal-sniffer-annotations-1.14.jar;C:\Users\usher\.m2\repository\mysql\mysql-connector-java\5.1.44\mysql-connector-java-5.1.44.jar;C:\Users\usher\.m2\repository\org\mybatis\mybatis-spring\1.3.1\mybatis-spring-1.3.1.jar;C:\Users\usher\.m2\repository\org\mybatis\mybatis\3.4.5\mybatis-3.4.5.jar;C:\Users\usher\.m2\repository\tk\mybatis\mapper\3.4.2\mapper-3.4.2.jar;C:\Users\usher\.m2\repository\javax\persistence\persistence-api\1.0\persistence-api-1.0.jar;C:\Users\usher\.m2\repository\com\github\pagehelper\pagehelper\4.2.1\pagehelper-4.2.1.jar;C:\Users\usher\.m2\repository\com\github\jsqlparser\jsqlparser\0.9.5\jsqlparser-0.9.5.jar;C:\Users\usher\.m2\repository\com\alibaba\fastjson\1.2.39\fastjson-1.2.39.jar;C:\Users\usher\.m2\repository\com\alibaba\druid-spring-boot-starter\1.1.4\druid-spring-boot-starter-1.1.4.jar;C:\Users\usher\.m2\repository\com\alibaba\druid\1.1.4\druid-1.1.4.jar;D:\Program Files\Java\jdk1.8.0_121\lib\jconsole.jar;D:\Program Files\Java\jdk1.8.0_121\lib\tools.jar;C:\Users\usher\.m2\repository\org\springframework\boot\spring-boot-autoconfigure\1.5.7.RELEASE\spring-boot-autoconfigure-1.5.7.RELEASE.jar;C:\Users\usher\.m2\repository\org\freemarker\freemarker\2.3.23\freemarker-2.3.23.jar;C:\Users\usher\.m2\repository\org\mybatis\generator\mybatis-generator-core\1.3.5\mybatis-generator-core-1.3.5.jar" com.intellij.rt.execution.junit.JUnitStarter -ideVersion5 -junit4 com.conpany.project.ResttemplateApplicationTests
23:05:47.504 [main] DEBUG org.springframework.web.client.RestTemplate - Created POST request for "http://localhost:9999/test/map"
23:05:47.506 [main] DEBUG org.springframework.web.client.RestTemplate - Setting request Accept header to [text/plain, application/json, application/*+json, text/plain, */*, */*]
23:05:47.520 [main] DEBUG org.springframework.web.client.RestTemplate - Writing [{address=广东深圳, name=小芳, age=18}] using [org.springframework.http.converter.json.MappingJackson2HttpMessageConverter@77e4c80f]
23:05:47.547 [main] DEBUG org.springframework.web.client.RestTemplate - POST request for "http://localhost:9999/test/map" resulted in 200 (null)
23:05:47.547 [main] DEBUG org.springframework.web.client.RestTemplate - Reading [java.lang.String] as "text/plain;charset=UTF-8" using [org.springframework.http.converter.StringHttpMessageConverter@5af97850]
"SUCCESS:{address=广东深圳, name=小芳, age=18}"
23:05:47.568 [main] DEBUG org.springframework.web.client.RestTemplate - Created POST request for "http://localhost:9999/test/json"
23:05:47.569 [main] DEBUG org.springframework.web.client.RestTemplate - Setting request Accept header to [text/plain, application/json, application/*+json, text/plain, */*, */*]
23:05:47.601 [main] DEBUG org.springframework.web.client.RestTemplate - Writing [{"address":"广东深圳","name":"小芳","age":18}] using [org.springframework.http.converter.json.MappingJackson2HttpMessageConverter@4313f5bc]
23:05:47.606 [main] DEBUG org.springframework.web.client.RestTemplate - POST request for "http://localhost:9999/test/json" resulted in 200 (null)
23:05:47.607 [main] DEBUG org.springframework.web.client.RestTemplate - Reading [java.lang.String] as "text/plain;charset=UTF-8" using [org.springframework.http.converter.StringHttpMessageConverter@7f010382]
"SUCCESS:{\"address\":\"广东深圳\",\"name\":\"小芳\",\"age\":18}"
23:05:47.611 [main] DEBUG org.springframework.web.client.RestTemplate - Created POST request for "http://localhost:9999/test/object"
23:05:47.611 [main] DEBUG org.springframework.web.client.RestTemplate - Setting request Accept header to [text/plain, application/json, application/*+json, text/plain, */*, */*]
23:05:47.620 [main] DEBUG org.springframework.web.client.RestTemplate - Writing [RequestObject [age=18, name=小芳, address=广东深圳]] using [org.springframework.http.converter.json.MappingJackson2HttpMessageConverter@3aefe5e5]
23:05:47.623 [main] DEBUG org.springframework.web.client.RestTemplate - POST request for "http://localhost:9999/test/object" resulted in 200 (null)
23:05:47.623 [main] DEBUG org.springframework.web.client.RestTemplate - Reading [java.lang.String] as "text/plain;charset=UTF-8" using [org.springframework.http.converter.StringHttpMessageConverter@2f7c2f4f]
"SUCCESS:RequestObject [age=18, name=小芳, address=广东深圳]"

4.通过运行结果可以看出postForObject方法完全可以传递JavaBean和第三方JSON对象,而controller完全能够成功接收。

5.现在思考一个问题:假设我们的postForObject方法传入的是Java对象,而controller用JSON对象或者Map对象来接收,是否可以调通呢?答案是完全可行的。我们对测试类第一个方法稍作修改如下。以下这个方法被改造成,将JavaBean分别传递给controller的postByMap和postByJsonObj来接收。

public void testJavaObj() {
    RequestObject request = new RequestObject();
    request.setAge(18);
    request.setName("小芳");
    request.setAddress("广东深圳");
    RestTemplate restTemplate = RestTemplateUtil.getInstance("utf-8");
    String url = "http://localhost:9999/test/object";
    String url1 = "http://localhost:9999/test/map";
    String url2 = "http://localhost:9999/test/json";
    String result = restTemplate.postForObject(url, request, String.class);
    System.out.println(result);
    String result1 = restTemplate.postForObject(url1, request, String.class);
    System.out.println(result1);
    String result2 = restTemplate.postForObject(url2, request, String.class);
    System.out.println(result2);
}

单独跑这个测试方法控制台输出如下,可以看出运行成功。

"D:\Program Files\Java\jdk1.8.0_121\bin\java" -ea -Didea.test.cyclic.buffer.size=1048576 "-javaagent:D:\Program Files\JetBrains\IntelliJ IDEA 2017.2.6\lib\idea_rt.jar=11365:D:\Program Files\JetBrains\IntelliJ IDEA 2017.2.6\bin" -Dfile.encoding=UTF-8 -classpath "D:\Program Files\JetBrains\IntelliJ IDEA 2017.2.6\lib\idea_rt.jar;D:\Program Files\JetBrains\IntelliJ IDEA 2017.2.6\plugins\junit\lib\junit-rt.jar;D:\Program Files\JetBrains\IntelliJ IDEA 2017.2.6\plugins\junit\lib\junit5-rt.jar;D:\Program Files\Java\jdk1.8.0_121\jre\lib\charsets.jar;D:\Program Files\Java\jdk1.8.0_121\jre\lib\deploy.jar;D:\Program Files\Java\jdk1.8.0_121\jre\lib\ext\access-bridge-64.jar;D:\Program Files\Java\jdk1.8.0_121\jre\lib\ext\cldrdata.jar;D:\Program Files\Java\jdk1.8.0_121\jre\lib\ext\dnsns.jar;D:\Program Files\Java\jdk1.8.0_121\jre\lib\ext\jaccess.jar;D:\Program Files\Java\jdk1.8.0_121\jre\lib\ext\jfxrt.jar;D:\Program Files\Java\jdk1.8.0_121\jre\lib\ext\localedata.jar;D:\Program Files\Java\jdk1.8.0_121\jre\lib\ext\nashorn.jar;D:\Program Files\Java\jdk1.8.0_121\jre\lib\ext\sunec.jar;D:\Program Files\Java\jdk1.8.0_121\jre\lib\ext\sunjce_provider.jar;D:\Program Files\Java\jdk1.8.0_121\jre\lib\ext\sunmscapi.jar;D:\Program Files\Java\jdk1.8.0_121\jre\lib\ext\sunpkcs11.jar;D:\Program Files\Java\jdk1.8.0_121\jre\lib\ext\zipfs.jar;D:\Program Files\Java\jdk1.8.0_121\jre\lib\javaws.jar;D:\Program Files\Java\jdk1.8.0_121\jre\lib\jce.jar;D:\Program Files\Java\jdk1.8.0_121\jre\lib\jfr.jar;D:\Program Files\Java\jdk1.8.0_121\jre\lib\jfxswt.jar;D:\Program Files\Java\jdk1.8.0_121\jre\lib\jsse.jar;D:\Program Files\Java\jdk1.8.0_121\jre\lib\management-agent.jar;D:\Program Files\Java\jdk1.8.0_121\jre\lib\plugin.jar;D:\Program Files\Java\jdk1.8.0_121\jre\lib\resources.jar;D:\Program Files\Java\jdk1.8.0_121\jre\lib\rt.jar;D:\ideas\spring-boot-api-project-seed-master\target\test-classes;D:\ideas\spring-boot-api-project-seed-master\target\classes;C:\Users\usher\.m2\repository\org\springframework\boot\spring-boot-starter-web\1.5.7.RELEASE\spring-boot-starter-web-1.5.7.RELEASE.jar;C:\Users\usher\.m2\repository\org\springframework\boot\spring-boot-starter\1.5.7.RELEASE\spring-boot-starter-1.5.7.RELEASE.jar;C:\Users\usher\.m2\repository\org\springframework\boot\spring-boot\1.5.7.RELEASE\spring-boot-1.5.7.RELEASE.jar;C:\Users\usher\.m2\repository\org\springframework\boot\spring-boot-starter-logging\1.5.7.RELEASE\spring-boot-starter-logging-1.5.7.RELEASE.jar;C:\Users\usher\.m2\repository\ch\qos\logback\logback-classic\1.1.11\logback-classic-1.1.11.jar;C:\Users\usher\.m2\repository\ch\qos\logback\logback-core\1.1.11\logback-core-1.1.11.jar;C:\Users\usher\.m2\repository\org\slf4j\jcl-over-slf4j\1.7.25\jcl-over-slf4j-1.7.25.jar;C:\Users\usher\.m2\repository\org\slf4j\jul-to-slf4j\1.7.25\jul-to-slf4j-1.7.25.jar;C:\Users\usher\.m2\repository\org\slf4j\log4j-over-slf4j\1.7.25\log4j-over-slf4j-1.7.25.jar;C:\Users\usher\.m2\repository\org\yaml\snakeyaml\1.17\snakeyaml-1.17.jar;C:\Users\usher\.m2\repository\org\springframework\boot\spring-boot-starter-tomcat\1.5.7.RELEASE\spring-boot-starter-tomcat-1.5.7.RELEASE.jar;C:\Users\usher\.m2\repository\org\apache\tomcat\embed\tomcat-embed-core\8.5.20\tomcat-embed-core-8.5.20.jar;C:\Users\usher\.m2\repository\org\apache\tomcat\embed\tomcat-embed-el\8.5.20\tomcat-embed-el-8.5.20.jar;C:\Users\usher\.m2\repository\org\apache\tomcat\embed\tomcat-embed-websocket\8.5.20\tomcat-embed-websocket-8.5.20.jar;C:\Users\usher\.m2\repository\org\hibernate\hibernate-validator\5.3.5.Final\hibernate-validator-5.3.5.Final.jar;C:\Users\usher\.m2\repository\javax\validation\validation-api\1.1.0.Final\validation-api-1.1.0.Final.jar;C:\Users\usher\.m2\repository\org\jboss\logging\jboss-logging\3.3.1.Final\jboss-logging-3.3.1.Final.jar;C:\Users\usher\.m2\repository\com\fasterxml\classmate\1.3.4\classmate-1.3.4.jar;C:\Users\usher\.m2\repository\com\fasterxml\jackson\core\jackson-databind\2.8.10\jackson-databind-2.8.10.jar;C:\Users\usher\.m2\repository\com\fasterxml\jackson\core\jackson-annotations\2.8.0\jackson-annotations-2.8.0.jar;C:\Users\usher\.m2\repository\com\fasterxml\jackson\core\jackson-core\2.8.10\jackson-core-2.8.10.jar;C:\Users\usher\.m2\repository\org\springframework\spring-web\4.3.11.RELEASE\spring-web-4.3.11.RELEASE.jar;C:\Users\usher\.m2\repository\org\springframework\spring-aop\4.3.11.RELEASE\spring-aop-4.3.11.RELEASE.jar;C:\Users\usher\.m2\repository\org\springframework\spring-beans\4.3.11.RELEASE\spring-beans-4.3.11.RELEASE.jar;C:\Users\usher\.m2\repository\org\springframework\spring-context\4.3.11.RELEASE\spring-context-4.3.11.RELEASE.jar;C:\Users\usher\.m2\repository\org\springframework\spring-webmvc\4.3.11.RELEASE\spring-webmvc-4.3.11.RELEASE.jar;C:\Users\usher\.m2\repository\org\springframework\spring-expression\4.3.11.RELEASE\spring-expression-4.3.11.RELEASE.jar;C:\Users\usher\.m2\repository\org\springframework\boot\spring-boot-starter-jdbc\1.5.7.RELEASE\spring-boot-starter-jdbc-1.5.7.RELEASE.jar;C:\Users\usher\.m2\repository\org\apache\tomcat\tomcat-jdbc\8.5.20\tomcat-jdbc-8.5.20.jar;C:\Users\usher\.m2\repository\org\apache\tomcat\tomcat-juli\8.5.20\tomcat-juli-8.5.20.jar;C:\Users\usher\.m2\repository\org\springframework\spring-jdbc\4.3.11.RELEASE\spring-jdbc-4.3.11.RELEASE.jar;C:\Users\usher\.m2\repository\org\springframework\spring-tx\4.3.11.RELEASE\spring-tx-4.3.11.RELEASE.jar;C:\Users\usher\.m2\repository\org\springframework\boot\spring-boot-starter-test\1.5.7.RELEASE\spring-boot-starter-test-1.5.7.RELEASE.jar;C:\Users\usher\.m2\repository\org\springframework\boot\spring-boot-test\1.5.7.RELEASE\spring-boot-test-1.5.7.RELEASE.jar;C:\Users\usher\.m2\repository\org\springframework\boot\spring-boot-test-autoconfigure\1.5.7.RELEASE\spring-boot-test-autoconfigure-1.5.7.RELEASE.jar;C:\Users\usher\.m2\repository\com\jayway\jsonpath\json-path\2.2.0\json-path-2.2.0.jar;C:\Users\usher\.m2\repository\net\minidev\json-smart\2.2.1\json-smart-2.2.1.jar;C:\Users\usher\.m2\repository\net\minidev\accessors-smart\1.1\accessors-smart-1.1.jar;C:\Users\usher\.m2\repository\org\ow2\asm\asm\5.0.3\asm-5.0.3.jar;C:\Users\usher\.m2\repository\org\slf4j\slf4j-api\1.7.25\slf4j-api-1.7.25.jar;C:\Users\usher\.m2\repository\junit\junit\4.12\junit-4.12.jar;C:\Users\usher\.m2\repository\org\assertj\assertj-core\2.6.0\assertj-core-2.6.0.jar;C:\Users\usher\.m2\repository\org\mockito\mockito-core\1.10.19\mockito-core-1.10.19.jar;C:\Users\usher\.m2\repository\org\objenesis\objenesis\2.1\objenesis-2.1.jar;C:\Users\usher\.m2\repository\org\hamcrest\hamcrest-core\1.3\hamcrest-core-1.3.jar;C:\Users\usher\.m2\repository\org\hamcrest\hamcrest-library\1.3\hamcrest-library-1.3.jar;C:\Users\usher\.m2\repository\org\skyscreamer\jsonassert\1.4.0\jsonassert-1.4.0.jar;C:\Users\usher\.m2\repository\com\vaadin\external\google\android-json\0.0.20131108.vaadin1\android-json-0.0.20131108.vaadin1.jar;C:\Users\usher\.m2\repository\org\springframework\spring-core\4.3.11.RELEASE\spring-core-4.3.11.RELEASE.jar;C:\Users\usher\.m2\repository\org\springframework\spring-test\4.3.11.RELEASE\spring-test-4.3.11.RELEASE.jar;C:\Users\usher\.m2\repository\commons-codec\commons-codec\1.10\commons-codec-1.10.jar;C:\Users\usher\.m2\repository\org\apache\commons\commons-lang3\3.6\commons-lang3-3.6.jar;C:\Users\usher\.m2\repository\com\google\guava\guava\23.0\guava-23.0.jar;C:\Users\usher\.m2\repository\com\google\code\findbugs\jsr305\1.3.9\jsr305-1.3.9.jar;C:\Users\usher\.m2\repository\com\google\errorprone\error_prone_annotations\2.0.18\error_prone_annotations-2.0.18.jar;C:\Users\usher\.m2\repository\com\google\j2objc\j2objc-annotations\1.1\j2objc-annotations-1.1.jar;C:\Users\usher\.m2\repository\org\codehaus\mojo\animal-sniffer-annotations\1.14\animal-sniffer-annotations-1.14.jar;C:\Users\usher\.m2\repository\mysql\mysql-connector-java\5.1.44\mysql-connector-java-5.1.44.jar;C:\Users\usher\.m2\repository\org\mybatis\mybatis-spring\1.3.1\mybatis-spring-1.3.1.jar;C:\Users\usher\.m2\repository\org\mybatis\mybatis\3.4.5\mybatis-3.4.5.jar;C:\Users\usher\.m2\repository\tk\mybatis\mapper\3.4.2\mapper-3.4.2.jar;C:\Users\usher\.m2\repository\javax\persistence\persistence-api\1.0\persistence-api-1.0.jar;C:\Users\usher\.m2\repository\com\github\pagehelper\pagehelper\4.2.1\pagehelper-4.2.1.jar;C:\Users\usher\.m2\repository\com\github\jsqlparser\jsqlparser\0.9.5\jsqlparser-0.9.5.jar;C:\Users\usher\.m2\repository\com\alibaba\fastjson\1.2.39\fastjson-1.2.39.jar;C:\Users\usher\.m2\repository\com\alibaba\druid-spring-boot-starter\1.1.4\druid-spring-boot-starter-1.1.4.jar;C:\Users\usher\.m2\repository\com\alibaba\druid\1.1.4\druid-1.1.4.jar;D:\Program Files\Java\jdk1.8.0_121\lib\jconsole.jar;D:\Program Files\Java\jdk1.8.0_121\lib\tools.jar;C:\Users\usher\.m2\repository\org\springframework\boot\spring-boot-autoconfigure\1.5.7.RELEASE\spring-boot-autoconfigure-1.5.7.RELEASE.jar;C:\Users\usher\.m2\repository\org\freemarker\freemarker\2.3.23\freemarker-2.3.23.jar;C:\Users\usher\.m2\repository\org\mybatis\generator\mybatis-generator-core\1.3.5\mybatis-generator-core-1.3.5.jar" com.intellij.rt.execution.junit.JUnitStarter -ideVersion5 -junit4 com.conpany.project.ResttemplateApplicationTests,testJavaObj
23:30:29.349 [main] DEBUG org.springframework.web.client.RestTemplate - Created POST request for "http://localhost:9999/test/object"
23:30:29.352 [main] DEBUG org.springframework.web.client.RestTemplate - Setting request Accept header to [text/plain, application/json, application/*+json, text/plain, */*, */*]
23:30:29.376 [main] DEBUG org.springframework.web.client.RestTemplate - Writing [RequestObject [age=18, name=小芳, address=广东深圳]] using [org.springframework.http.converter.json.MappingJackson2HttpMessageConverter@7d68ef40]
23:30:29.394 [main] DEBUG org.springframework.web.client.RestTemplate - POST request for "http://localhost:9999/test/object" resulted in 200 (null)
23:30:29.394 [main] DEBUG org.springframework.web.client.RestTemplate - Reading [java.lang.String] as "text/plain;charset=UTF-8" using [org.springframework.http.converter.StringHttpMessageConverter@3b2da18f]
"SUCCESS:RequestObject [age=18, name=小芳, address=广东深圳]"
23:30:29.396 [main] DEBUG org.springframework.web.client.RestTemplate - Created POST request for "http://localhost:9999/test/map"
23:30:29.396 [main] DEBUG org.springframework.web.client.RestTemplate - Setting request Accept header to [text/plain, application/json, application/*+json, text/plain, */*, */*]
23:30:29.396 [main] DEBUG org.springframework.web.client.RestTemplate - Writing [RequestObject [age=18, name=小芳, address=广东深圳]] using [org.springframework.http.converter.json.MappingJackson2HttpMessageConverter@7d68ef40]
23:30:29.399 [main] DEBUG org.springframework.web.client.RestTemplate - POST request for "http://localhost:9999/test/map" resulted in 200 (null)
23:30:29.399 [main] DEBUG org.springframework.web.client.RestTemplate - Reading [java.lang.String] as "text/plain;charset=UTF-8" using [org.springframework.http.converter.StringHttpMessageConverter@3b2da18f]
"SUCCESS:{address=广东深圳, name=小芳, age=18}"
23:30:29.399 [main] DEBUG org.springframework.web.client.RestTemplate - Created POST request for "http://localhost:9999/test/json"
23:30:29.399 [main] DEBUG org.springframework.web.client.RestTemplate - Setting request Accept header to [text/plain, application/json, application/*+json, text/plain, */*, */*]
23:30:29.399 [main] DEBUG org.springframework.web.client.RestTemplate - Writing [RequestObject [age=18, name=小芳, address=广东深圳]] using [org.springframework.http.converter.json.MappingJackson2HttpMessageConverter@7d68ef40]
23:30:29.402 [main] DEBUG org.springframework.web.client.RestTemplate - POST request for "http://localhost:9999/test/json" resulted in 200 (null)
23:30:29.403 [main] DEBUG org.springframework.web.client.RestTemplate - Reading [java.lang.String] as "text/plain;charset=UTF-8" using [org.springframework.http.converter.StringHttpMessageConverter@3b2da18f]
"SUCCESS:{\"address\":\"广东深圳\",\"name\":\"小芳\",\"age\":18}"

同理:我们的testMap的测试方法不仅可以传递Map也可以传JavaBean和JSONObejct,我们的testJson测试方法不仅可以传JSONObject,也可以传JavaBean和Map

6.RestTemplate提供了一大堆api好像都可以来用提交请求,为什么只讨论postForObject呢?以下是简单分析:

1).postForObject直接返回响应体,我们请求时通过泛型约束响应体的类型,但是这个方法无法得到状态头信息。

2).postForEntity方法将返回ResponseEntity对象,这个方法的返回值不仅包含状态头信息还包含响应体,例如你想知道自己的请求是返回500还是200,那么请使用postForEntity!且ResponseEntity实现了HttpEntity接口,它提供getBody返回1)的结果。

3).postForLocation方法将返回jdk的URI对象!

4).patchForObject方法同postForObject基本一致,唯一区别是一个执行HttpMethod.PATCH,一个执行的是HttpMethod.POST

5).execute方法是postForEntity、postForObject、postForLocation或patchForObject直接调用的方法,调用类型不同返回值类型就不同!

6).doExecute是execute直接调用的方法,调用类型不同返回类型就不同!

7).exchange直接调用execute,返回ResponseEntity对象,它接收HttpMethod参数,可以从外部定义请求方式,例如post请求或者get请求。

总结下,关于postForObject,postForEntity,postForLocation,patchForObject,exchange,execute,doExecute各个方法的区别和联系如下图所示。青色方块表示方法,绿色圆角方块表示返回值类型,红色箭头表示方法调用方向,紫色箭头表示该方法提供的返回值。


关于RestTemplate的简单分析,暂时到此结束,谢谢观看。


  • 37
    点赞
  • 142
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 26
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 26
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Alphathur

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值