RestTemplate

一、RestTemplate是什么

RestTemplate是spring提供的Http协议实现类。也就是说导入spring-boot-starter-web的项目可以直接使用RestTemplate类,就是基于模板方法设计模式的,封装了所有需要使用的API
在该类中主要针对6类请求方式封装的方法。

HTTP method RestTemplate methods
DELETE delete
GET getForObject
PUT put
POST postForLocation

二、项目引入

对于springboot,声明一个Bean,使用时注入这个bean即可

    @Bean
    public RestTemplate getRestTemplate() {
        return new RestTemplate();
    }
    @Autowired
    private RestTemplate restTemplate;

在jsp项目,使用一个静态方法返回 restTemplate

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

三、get

get方式提供了两个方法:
getForObject:把响应体直接转换为对象。该方法返回值为特定类类型。舍弃了Response Header的东西,但是用起来比getForEntity方便。如果只需要获取响应体中内容(调用控制器方法的返回值)使用此方法。
getForEntity:返回值包含响应头和响应体。用起来比getForObject稍微麻烦一些。

1、getForObject/getForEntity无参数

getForEntity和getForObject除了返回值不一样以外,其他用法完全相同。

@RestController
public class ServerController {
    @GetMapping(value = "/demo1")
    public String demo1(){
        return "demo1";
    }
}
    @Test
    void testGetForObject() {
        RestTemplate restTemplate = new RestTemplate();
        // 第二个参数是请求控制器响应内容类型。决定getForObject方法返回值类型。
        String result = restTemplate.getForObject("http://localhost:8080/demo1", String.class);
        System.out.println(result);
    }
  @Test
    void testGetForEntity(){
        RestTemplate restTemplate = new RestTemplate();
        // getForEntity第二个参数类型决定了ResponseEntity泛型类型,表示相应体中内容类型。
        ResponseEntity result = restTemplate.getForEntity("http://localhost:8080/demo1", String.class);
        // 取出相应体内容。
        System.out.println(result.getBody());
        // 取出请求状态码。
        System.out.println(result.getStatusCode());
        // 通过getHeaders()取出响应头中想要的信息,以ContentType举例。
        System.out.println(result.getHeaders().getContentType());
    }

RestTemplate_第1张图片

 

2、getForObject 使用不定项参数

@RequestMapping("/demo2")
public String demo2(String name,int age){
    return "name:"+name+",age:"+age;
}

添加测试方法
getForObject第一个参数URL中使用URL重写方式包含请求参数。参数后面使用{序号}格式进行占位,序号。从1开始。
注意:getForObject第三个开始的参数顺序要和序号严格对应

@Test
void testGetForObjectWithParam(){
    RestTemplate restTemplate = new RestTemplate();
    String result = restTemplate.getForObject("http://localhost:8080/demo2?age={1}&name={2}", String.class, 123, "张三");
    System.out.println(result);
}

3、getForObject 使用Map传参

根据占位符{key}进行对应,占位符中key的内容就是Map中key对应的Value

    @Test
    void testGetForObjectWithMapParam(){
        RestTemplate restTemplate = new RestTemplate();
        Map map = new HashMap<>();
        map.put("age",15);
        map.put("name","map传参");
        String result = restTemplate.getForObject("http://localhost:8080/demo2?age={age}&name={name}", String.class, map);
        System.out.println(result);
    }

4、getForObject 使用restful传值

@RequestMapping("/demo3/{name}/{age}")
public String demo3(@PathVariable String name,@PathVariable int age){
    return "restfule:name:"+name+",age:"+age;
}
@Test
void testGetForObjectRestful() {
    RestTemplate restTemplate = new RestTemplate();
    String result = restTemplate.getForObject("http://localhost:8080/demo3/张三/12", String.class);
    System.out.println(result);
}

其他后续用到再说

你可能感兴趣的:(java开发模板,spring,boot,后端,java)