SpringBoot-30-RestTemplate的Post详解

SpringBoot-30-RestTemplate的Post详解

首页冒险解谜后室Entity30更新时间:2024-10-11
SpringBoot-30-RestTemplate的Post详解

RestTemplate的Htttp Post请求我们经常使用下面两个方法:

postForObject()方法的使用发送Json格式

我们还是使用免费接口地址http://jsonplaceholder.typicode.com作为我们的测试数据地址,我们写一个接口代码如下,

@RequestMapping("/testpost") @RestController publicclassTestController{ @Autowired privateRestTemplaterestTemplate; @PostMapping("comments") publicTestEntitytest(){ TestEntityentity=newTestEntity(); entity.setId(501); entity.setPostId(101); entity.setBody("testdemo"); entity.setEmail("Davion@zz.net"); entity.setName("zhouobang"); TestEntityforEntity=restTemplate.postForObject("http://jsonplaceholder.typicode.com/comments?author.name=typicode",entity,TestEntity.class); returnforEntity; } }

TestEntity实体类

@Data publicclassTestEntity{ privateintpostId; privateintid; privateStringname; privateStringemail; privateStringbody; }

测试http://localhost:8080/testpost/comments接口,结果为:

:postForObject的第二个参数是请求数据对象,第三个参数是返回值类型

表单数据提交

postForObject模拟表单数据提交的例子,代码如下

@PostMapping("comments/form") publicStringtestform(){ //请求地址 Stringurl="http://jsonplaceholder.typicode.com/comments"; //请求头设置,x-www-form-urlencoded格式的数据 HttpHeadersheaders=newHttpHeaders(); headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); //提交参数设置 MultiValueMap<String,String>map=newLinkedMultiValueMap<>(); map.add("postId","102"); map.add("id","502"); map.add("name","lisi"); map.add("email","qq.@qq.com"); map.add("body","mybody"); //组装请求体 HttpEntity<MultiValueMap<String,String>>request= newHttpEntity<MultiValueMap<String,String>>(map,headers); //发送post请求,并打印结果,以String类型接收响应结果JSON字符串 Stringresult=restTemplate.postForObject(url,request,String.class); returnresult; }

使用Postman测试http://localhost:8080/testpost/comments/form结果如下

使用占位符传递参数

@PostMapping("comments_1/{type}") publicTestEntitytest_1(@PathVariable("type")Stringtype){ TestEntityentity=newTestEntity(); entity.setId(501); entity.setPostId(101); entity.setBody("testdemo"); entity.setEmail("Davion@zz.net"); entity.setName("zhouobang"); TestEntityforEntity=restTemplate.postForObject("http://jsonplaceholder.typicode.com/{1}",entity,TestEntity.class,type); returnforEntity; }

@PostMapping("comments_2/{type}") publicTestEntitytest_2(@PathVariable("type")Stringtype){ TestEntityentity=newTestEntity(); entity.setId(501); entity.setPostId(101); entity.setBody("testdemo"); entity.setEmail("Davion@zz.net"); entity.setName("zhouobang"); TestEntityforEntity=restTemplate.postForObject("http://jsonplaceholder.typicode.com/{type}",entity,TestEntity.class,type); returnforEntity; }

@PostMapping("comments_3/{type}") publicTestEntitytest_3(@PathVariable("type")Stringtype){ TestEntityentity=newTestEntity(); entity.setId(501); entity.setPostId(101); entity.setBody("testdemo"); entity.setEmail("Davion@zz.net"); entity.setName("zhouobang"); Map<String,Object>map=newHashMap<>(); map.put("type",type); TestEntityforEntity=restTemplate.postForObject("http://jsonplaceholder.typicode.com/{type}",entity,TestEntity.class,map); returnforEntity; } postForEntity()方法的使用

getForObject()所有的传参请求方式,getForEntity()都可以使用,使用方式也几乎一样。在返回结果上有区别,使用**ResponseEntity**来就收响应结果。

@PostMapping("comments_4/{type}") publicTestEntitytest_4(@PathVariable("type")Stringtype){ TestEntityentity=newTestEntity(); entity.setId(520); entity.setPostId(110); entity.setBody("comments_4demo"); entity.setEmail("comments_4@zz.net"); entity.setName("zhouocomments_4"); Map<String,Object>map=newHashMap<>(); map.put("type",type); ResponseEntity<TestEntity>forEntity=restTemplate.postForEntity("http://jsonplaceholder.typicode.com/{type}",entity,TestEntity.class,map); System.out.println("StatusCode:" forEntity.getStatusCode()); System.out.println("StatusCodeValue:" forEntity.getStatusCodeValue()); System.out.println("Headers:" forEntity.getHeaders()); returnforEntity.getBody(); }

测试返回结果会和上面的一样,但是在console会有输出

postForLocation() 方法的使用

postForLocation用法基本都和postForObject()或postForEntity()一致。唯一区别在于返回值是一个URI。该URI返回值体现的是:用于提交完成数据之后的页面跳转,或数据提交完成之后的下一步数据操作URI。

@PostMapping("comments_5/{type}") publicStringtest_5(@PathVariable("type")Stringtype){ TestEntityentity=newTestEntity(); entity.setId(520); entity.setPostId(110); entity.setBody("comments_4demo"); entity.setEmail("comments_4@zz.net"); entity.setName("zhouocomments_4"); Map<String,Object>map=newHashMap<>(); map.put("type",type); URIuri=restTemplate.postForLocation("http://jsonplaceholder.typicode.com/{type}",entity,map); returnuri.getPath(); }

使用postman 测试http://localhost:8080/testpost/comments_5/comments

返回结果为

"http://jsonplaceholder.typicode.com/comments/501"

查看全文
大家还看了
也许喜欢
更多游戏

Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved