springboot2.1.1发布与调用REST服务

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/com_it/article/details/85018870

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来发送请求。

项目源码地址:

 https://github.com/1360302610/springboot2.x_REST_test 

猜你喜欢

转载自blog.csdn.net/com_it/article/details/85018870