package com.xy.plat;

import java.util.Collections;

import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.HttpEntity;
import org.springframework.http.ResponseEntity;
import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.web.client.RestTemplate;

public class RestTempletTest {

    private static final Logger log = LoggerFactory.getLogger(RestTempletTest.class);

    private static final RestTemplate rest = new RestTemplate(new HttpComponentsClientHttpRequestFactory());

    @Test
    public void Test() {
        {
            // http://www.baidu.com/?id=000
            ResponseEntity<String> entity = rest.getForEntity("http://www.baidu.com/?id={1}", String.class, "000");
            log.info(entity.getBody());
        }
        {
            // http://www.baidu.com/?id=ID
            ResponseEntity<String> entity = rest.getForEntity("http://www.baidu.com/?id={id}", String.class, Collections.singletonMap("id", "ID"));
            log.info(entity.getBody());
        }
        {
            // http://www.baidu.com/?id=789 -d {"name":"test"}
            // Content-Type: application/json;charset=UTF-8
            ResponseEntity<String> entity = rest.postForEntity("http://www.baidu.com/?id={1}", Collections.singletonMap("name", "test"), String.class, "789");
            log.info(entity.getBody());
        }
        {
            // http://www.baidu.com/?id=789 -d {"name":"test"}
            // Content-Type: application/json;charset=UTF-8
            String entity = rest.postForObject("http://www.baidu.com/?id={1}", Collections.singletonMap("name", "test"), String.class, "123");
            log.info(entity);
        }
        {
            // http://www.baidu.com/?id=789 -d
            // Content-Type: application/x-www-form-urlencoded
            MultiValueMap<String, String> headers = new LinkedMultiValueMap<>();
            // ....
            MultiValueMap<String, String> map = new LinkedMultiValueMap<>();
            map.add("key", "value");
            HttpEntity<MultiValueMap<String, String>> req = new HttpEntity<MultiValueMap<String, String>>(map, headers);
            String entity = rest.postForObject("http://www.baidu.com/?id={1}", req, String.class, "456");
            log.info(entity);
        }
        {
            // 注意参数不会做 URL编码
            // http://www.baidu.com/?id=? -d {"name":"test"}
            // Content-Type: application/json;charset=UTF-8
            MultiValueMap<String, String> map = new LinkedMultiValueMap<>();
            map.add("key", "value?");// 会错URL编码
            String entity = rest.postForObject("http://www.baidu.com/?id={1}", map, String.class, "?");
            log.info(entity);
        }
    }
}