RestTemplate的Htttp Post请求我们经常使用下面两个方法:
我们还是使用免费接口地址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