spring boot(5)---RestTemplate请求HTTP(1)

RestTemplate请求HTTP(1)

 

说明

传统情况下在java代码里访问restful服务,一般使用Apache的HttpClient。不过此种方法使用起来太过繁琐。spring提供了一种简单便捷的模板类来进行操作,这就是RestTemplate。 在这里插入图片描述

使用estTemplate访问restful接口非常的简单粗暴无脑, 一句代码请求。(url, RequestMap, ResponseBean.class)这三个参数分别代表 请求地址、请求参数、HTTP响应转换被转换成的对象类型。

工程建立

参照教程【SpringBoot 2.1 | 第一篇:构建第一个SpringBoot工程】新建一个Spring Boot项目,名字叫demoresttemplatehttp, 在目录src/main/java/resources 下找到配置文件application.properties,重命名为application.yml

请求url

RESTful service已经准备好, http://gturnquist-quoters.cfapps.io/api/random. 这个链接随机返回SpringBoot的好处json. 格式如下:

{
   type: "success",
   value: {
      id: 10,
      quote: "Really loving Spring Boot, makes stand alone Spring apps easy."
   }
}

RestTemplate 可以在main函数里直接调用,所以直接建一个普通的类:com.zgpeace.demoresttemplatehttp.run.Application.java, 代码如下:

package com.zgpeace.demoresttemplatehttp.run;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.client.RestTemplate;

public class Application {

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

    public static void main(String args[]) {
        RestTemplate restTemplate = new RestTemplate();
        String result = restTemplate.getForObject("http://gturnquist-quoters.cfapps.io/api/random", String.class);
        log.info(result);
    }

}

打印日志内容:

{"type":"success",
 "value":{"id":1,
	"quote":"Working with Spring Boot is like pair-programming with the Spring developers."
	}
}

请求结果model化

在项目中,每次都解析字符串显得比较low,一般会对结果序列化为对象。 新建model对象:com.zgpeace.demoresttemplatehttp.bean.Value

package com.zgpeace.demoresttemplatehttp.bean;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;

@JsonIgnoreProperties(ignoreUnknown = true)
public class Value {

    private Long id;
    private String quote;

    public Value() {
    }

    public Long getId() {
        return this.id;
    }

    public String getQuote() {
        return this.quote;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public void setQuote(String quote) {
        this.quote = quote;
    }

    @Override
    public String toString() {
        return "Value{" +
                "id=" + id +
                ", quote='" + quote + '\'' +
                '}';
    }
}

注解@JsonIgnoreProperties (来自类库 Jackson JSON)表示任何属性不在Bean定义,则忽略。 新建model对象:com.zgpeace.demoresttemplatehttp.bean.Quote

package com.zgpeace.demoresttemplatehttp.bean;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;

@JsonIgnoreProperties(ignoreUnknown = true)
public class Quote {

    private String type;
    private Value value;

    public Quote() {
    }

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }

    public Value getValue() {
        return value;
    }

    public void setValue(Value value) {
        this.value = value;
    }

    @Override
    public String toString() {
        return "Quote{" +
                "type='" + type + '\'' +
                ", value=" + value +
                '}';
    }
}

Spring Boot通过生命周期的方式请求

完善类com.zgpeace.demoresttemplatehttp.DemoresttemplatehttpApplication

package com.zgpeace.demoresttemplatehttp;

import com.zgpeace.demoresttemplatehttp.bean.Quote;
import com.zgpeace.demoresttemplatehttp.run.Application;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.client.RestTemplateBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;

@SpringBootApplication
public class DemoresttemplatehttpApplication {

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

    public static void main(String args[]) {
        SpringApplication.run(DemoresttemplatehttpApplication.class);
    }

    @Bean
    public RestTemplate restTemplate(RestTemplateBuilder builder) {
        return builder.build();
    }

    @Bean
    public CommandLineRunner run(RestTemplate restTemplate) throws Exception {
        return args -> {
            Quote quote = restTemplate.getForObject(
                    "http://gturnquist-quoters.cfapps.io/api/random", Quote.class);
            log.info(quote.toString());
        };
    }
}

因为Jackson JSON类库在classpath中, RestTemplate会用它(通过 message converter) 把JSON 转换为对象Quote. 打印输出如下:

Quote{type='success', 
	  value=Value{id=1, 
	  			 quote='Working with Spring Boot is like pair-programming with the Spring developers.'
	  			   }
	  }

这里只举例RestTemplate发送HTTP GET请求. RestTemplate还只是请求方法POST, PUT, 和 DELETE.

总结

恭喜你!完成了RestTemplate请求http.

demo代码: https://github.com/zgpeace/Spring-Boot2.1/tree/master/demoresttemplatehttp

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值