1、发布REST服务
(1) 创建一个maven项目RestServer,加入spring-boot-starter-web依赖
(2) 创建一个Person类
package com.it.restserver;
public class Person {
private String name;
private Integer age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
@Override
public String toString() {
return "Person [name=" + name + ", age=" + age + "]";
}
}
(3)编写控制器
@RestController //组合注解
public class PersonController {
@GetMapping(value="/person/{name}",produces=MediaType.APPLICATION_JSON_VALUE)
public Person demo(@PathVariable String name) {
Person p=new Person();
p.setName(name);
p.setAge(18);
return p;
}
}
@RestController注解包含了@Controller和@ResponseBody等功能,查看源码可知
(4)右键发布REST服务
(5)浏览器测试服务是否发布成功
2、使用RestTemplate调用服务
RestTemplate是Spring Framework的一个类,继承了InterceptingHttpAccessor,所以有拦截器机制。还实现了RestOperations接口。该接口定义了一系列RESTful风格的方法。
2.1、创建一个maven项目RestTemplate, 加入spring-boot-starter-web依赖
2.2、将Person类导入该项目
2.3、在main方法中直接调用上面发布的服务
创建一个类,添加main方法
package com.it.restemplate;
import org.springframework.web.client.RestTemplate;
public class RestTemplateMain {
public static void main(String [] srg) {
RestTemplate rt=new RestTemplate();
Person p=rt.getForObject("http://localhost:8080/person/小度",Person.class);
System.out.println(p);
}
}
运行结果:
2.3.1、也可以在spring 的bean里面使用RestTemplate,如下:
package com.it.restemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.web.client.RestTemplateBuilder;
import org.springframework.stereotype.Service;
@Service
public class BeanService {
@Autowired
private RestTemplateBuilder builder;
public Person getPerson() {
return this.builder.rootUri("http://localhost:8080").build().getForObject("/person/小度2",Person.class);
}
}
创建单元测试类:
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment=WebEnvironment.NONE)
public class BeanServiceTest {
@Autowired
private BeanService bs;
@Test
public void test() {
Person person = bs.getPerson();
System.out.println(person);
}
}
运行结果:
3、使用Feign调用服务
Feign是Github上的开源项目,Feign使得 Java HTTP 客户端编写更方便。
3.1、创建一个maven项目RestFeign ,加入以下依赖 并复制Person类到这个项目里面
<dependency>
<groupId>io.github.openfeign</groupId>
<artifactId>feign-core</artifactId>
<version>10.1.0</version>
</dependency>
<dependency>
<groupId>io.github.openfeign</groupId>
<artifactId>feign-gson</artifactId>
<version>10.1.0</version>
</dependency>
3.2 、创建一个接口:
/**
* Feign客户端接口
*/
public interface PersonClient {
@RequestLine("GET /person/{name}")
Person getPerson(@Param("name") String name);
}
3.3、创建一个运行类
public class FeignMain {
public static void main(String[] args) {
PersonClient target = Feign.builder().decoder(new GsonDecoder()).target(PersonClient.class,"http://localhost:8080/");
System.out.println(target.getPerson("小小"));
}
}
3.4、运行结果:
使用Feign来创建PersonClient接口的实例,然后调用接口方法来访问服务。查看源码可知Feign帮我们动态生成了代理类,使用的JDK的动态代理,代理类将请求的信息封装,最终调用 HttpURLConnection来发送请求。
项目源码地址: