前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >springBoot集成RestTemplate

springBoot集成RestTemplate

作者头像
爱撒谎的男孩
发布2019-12-31 15:46:00
9830
发布2019-12-31 15:46:00
举报
文章被收录于专栏:码猿技术专栏码猿技术专栏

文章目录

1. SpringBoot集成RestTemplate

1.1. 构造restful风格的api

1.2. 注入

1.3. 详解

1.3.1. GET(获取数据)

1.3.1.1. 生产

1.3.1.2. 消费

1.3.2. POST(新建、添加)

1.3.3. PUT(更新)

1.3.4. DELETE(删除)

1.4. 参考文章

SpringBoot集成RestTemplate

构造restful风格的api

代码语言:javascript
复制
@RestController
public class DepetController {
	
	@Resource
	private DeptService deptService;
	
	/**
	 * 根据Id查找
	 * @param id 
	 * @return
	 */
	@GetMapping("/dept/{id}")
	public Dept getDept(@PathVariable("id") Integer id){
		Dept dept = deptService.getDeptById(id);
		return dept;
	}
	
	/**
	 * 分页获取列表
	 * @param pageNum
	 * @param pageSize
	 * @return
	 */
	@GetMapping("/dept")
	public List<Dept> getDeptList(Integer pageNum,Integer pageSize){
		return deptService.getDeptList(pageNum,pageSize);
	}
	
	
	/**
	 * 添加dept
	 * @param dept
	 * @return
	 */
	@PostMapping("/dept")
	public Dept addDepet(@RequestBody Dept dept){
		Dept dept1=deptService.addDept(dept);
		return dept1;
	}
	
	
	/**
	 * 修改dept
	 * @param dept
	 * @return
	 */
	@PutMapping("/dept")
	public boolean modifyDept(@RequestBody Dept dept){
		return deptService.modifyDept(dept);
	}
	
	
	/**
	 * 根据Id删除
	 * @param id
	 * @return
	 */
	@DeleteMapping("/dept/{id}")
	public boolean deleteDept(@PathVariable("id") Integer id){
		return deptService.deleteDept(id);
	}
}

注入

  • 在使用之前需要在配置文件中注入,如下:
代码语言:javascript
复制
@Configuration
public class RestConfig {
	@Bean
    public RestTemplate restTemplate(ClientHttpRequestFactory factory) {
        return new RestTemplate(factory);
    }

    @Bean
    public ClientHttpRequestFactory simpleClientHttpRequestFactory() {
        SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();
        factory.setReadTimeout(5000);//单位为ms
        factory.setConnectTimeout(5000);//单位为ms
        return factory;
    }
}
  • 注入之后即可直接使用了

详解

GET(获取数据)

生产
  • 安全幂等操作
  • 先创建一个GET请求的controller,如下:
代码语言:javascript
复制
/**
 * 通过get请求方式
 * @param id 
 * @param name
 * @return
 */
@GetMapping("/dept/{id}/{name}")
public Dept getDept(@PathVariable("id") Integer id,@PathVariable("name")String name){
	Dept dept=new Dept();
	dept.setDepetId(id);
	dept.setDepetName(name);
	return dept;
}
消费
  • public <T> T getForObject(String url, Class<T> responseType, Map<String, ?> uriVariables)
代码语言:javascript
复制
/**
 * 使用RestTemplate的getForObject()发出get请求
 */
@GetMapping("/consumer/{id}/{name}")
public Dept getDept(@PathVariable("id")Integer id,@PathVariable("name") String name) throws RestClientException, URISyntaxException{
	//使用一个Map封装Get请求的参数,其中key一定要和uri中的占位符一致
	Map<String, Object> params=new HashMap<String, Object>();
	params.put("id", id);
	params.put("name", name);
	Dept dept = restTemplate.getForObject(URL_PRFIX+"{id}/{name}", Dept.class,params);
	return dept;
}
  • public <T> T getForObject(URI url, Class<T> responseType)
代码语言:javascript
复制
/**
 * 使用RestTemplate的getForObject()发出get请求
 */
@GetMapping("/consumer/{id}/{name}")
public Dept getDept(@PathVariable("id")Integer id,@PathVariable("name") String name) throws RestClientException, URISyntaxException{
	//直接在uri中拼接参数
	Dept dept = restTemplate.getForObject(URL_PRFIX+id+"/"+name, Dept.class);
	return dept;
}
  • public <T> T getForObject(String url, Class<T> responseType, Object... uriVariables)
代码语言:javascript
复制
/**
 * 使用RestTemplate的getForObject()发出get请求
 */
@GetMapping("/consumer/{id}/{name}")
public Dept getDept(@PathVariable("id")Integer id,@PathVariable("name") String name) throws RestClientException, URISyntaxException{
	//使用{id}作为一个占位符,第三个参数是用来设置这个占位符的值,当然可以有多个占位符
	Dept dept = restTemplate.getForObject(URL_PRFIX+"{id}/{name}", Dept.class, id,name);
	return dept;
}
  • 以上三种形式的请求都是大同小异的,只是入参的方式不同罢了

POST(新建、添加)

  • 不安全
  • public <T> T postForObject(URI url, @Nullable Object request, Class<T> responseType)
    • 第一个参数是请求的uri
    • 第二个参数是添加的数据
    • 第三个是返回的数据类型
  • public <T> T postForObject(String url, @Nullable Object request, Class<T> responseType,Map<String, ?> uriVariables)
    • 前三个参数同上
    • 第四个参数是用来封装过滤参数的(?后面的)
  • public <T> T postForObject(String url, @Nullable Object request, Class<T> responseType,Object... uriVariables)
    • 同上
代码语言:javascript
复制
/**
 * 新建数据
 */
@PostMapping("/dept")
public Dept addDept(@RequestBody Dept dept) throws RestClientException, URISyntaxException{
	Dept dept2 = restTemplate.postForObject(new URI(URL_PRFIX), dept, Dept.class);
	return dept2;
}

PUT(更新)

  • public void put(URI url, @Nullable Object request)
    • 第一个参数是地址
    • 第二个参数是更新需要提交的数据
  • public void put(String url, @Nullable Object request, Object... uriVariables)
    • 前两个参数同上
    • 第二个参数是封装需要过滤的数据(?后面的数据)
代码语言:javascript
复制
/**
 * 更新数据
 * @param dept
 * @throws RestClientException
 * @throws URISyntaxException
 */
@PutMapping("/dept")
public void modifyDept(@RequestBody Dept dept) throws RestClientException, URISyntaxException{
	restTemplate.put(new URI(URL_PRFIX), dept);
}

DELETE(删除)

  • public void delete(URI url)
    • 第一个参数是地址
  • public void delete(String url, Object... uriVariables)
    • 第一个参数是地址
    • 第二个参数是过滤参数(?后面的)
  • public void delete(String url, Map<String, ?> uriVariables)
    • 第二个参数是过滤参数(?后面的)
代码语言:javascript
复制
/**
 * 删除数据
 * @param id
 */
@DeleteMapping("/dept/{id}")
public void delete(@PathVariable("id")Integer id){
	restTemplate.delete(URL_PRFIX+"/{id}", id);
}

参考文章

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-12-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • SpringBoot集成RestTemplate
    • 构造restful风格的api
      • 注入
        • 详解
          • GET(获取数据)
          • POST(新建、添加)
          • PUT(更新)
          • DELETE(删除)
        • 参考文章
        相关产品与服务
        Serverless HTTP 服务
        Serverless HTTP 服务基于腾讯云 API 网关 和 Web Cloud Function(以下简称“Web Function”)建站云函数(云函数的一种类型)的产品能力,可以支持各种类型的 HTTP 服务开发,实现了 Serverless 与 Web 服务最优雅的结合。用户可以快速构建 Web 原生框架,把本地的 Express、Koa、Nextjs、Nuxtjs 等框架项目快速迁移到云端,同时也支持 Wordpress、Discuz Q 等现有应用模版一键快速创建。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档