Spring RestTemplate: 比httpClient更优雅的Restful URL访问, java HttpPost with header
- {
- "Author": "tomcat and jerry",
- "url":"http://www.cnblogs.com/tomcatandjerry/p/5899722.html"
- }
Spring RestTemplate, 使用java访问URL更加优雅,更加方便。
核心代码:
- String url = "http://localhost:8080/json";
- JSONObject json = restTemplate.getForEntity(url, JSONObject.class).getBody();
就这么简单,API访问完成了!
附上SpringBoot相关的完整代码:
- RestTemplateConfig.java
- @Configuration
- public class RestTemplateConfig{
- @Bean
- public RestTemplate restTemplate(ClientHttpRequestFactory factory){
- return new RestTemplate(factory);
- }
- @Bean
- public ClientHttpRequestFactory simpleClientHttpRequestFactory(){
- SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();
- factory.setReadTimeout(5000);//ms
- factory.setConnectTimeout(15000);//ms
- return factory;
- }
- }
- SpringRestTemplateApp.java
- @RestController
- @EnableAutoConfiguration
- @Import(value = {Conf.class})
- public class SpringRestTemplateApp {
- @Autowired
- RestTemplate restTemplate;
- /***********HTTP GET method*************/
- @RequestMapping("")
- public String hello(){
- String url = "http://localhost:8080/json";
- JSONObject json = restTemplate.getForEntity(url, JSONObject.class).getBody();
- return json.toJSONString();
- }
- @RequestMapping("/json")
- public Object genJson(){
- JSONObject json = new JSONObject();
- json.put("descp", "this is spring rest template sample");
- return json;
- }
- /**********HTTP POST method**************/
- @RequestMapping("/postApi")
- public Object iAmPostApi(@RequestBody JSONObject parm){
- System.out.println(parm.toJSONString());
- parm.put("result", "hello post");
- return parm;
- }
- @RequestMapping("/post")
- public Object testPost(){
- String url = "http://localhost:8080/postApi";
- JSONObject postData = new JSONObject();
- postData.put("descp", "request for post");
- JSONObject json = restTemplate.postForEntity(url, postData, JSONObject.class).getBody();
- return json.toJSONString();
- }
- public static void main(String[] args) throws Exception {
- SpringApplication.run(SpringRestTemplateApp.class, args);
- }
- }
===============================
另外还支持异步调用AsyncRestTemplate
- @RequestMapping("/async")
- public String asyncReq(){
- String url = "http://localhost:8080/jsonAsync";
- ListenableFuture<ResponseEntity<JSONObject>> future = asyncRestTemplate.getForEntity(url, JSONObject.class);
- future.addCallback(new SuccessCallback<ResponseEntity<JSONObject>>() {
- public void onSuccess(ResponseEntity<JSONObject> result) {
- System.out.println(result.getBody().toJSONString());
- }
- }, new FailureCallback() {
- public void onFailure(Throwable ex) {
- System.out.println("onFailure:"+ex);
- }
- });
- return "this is async sample";
- }
================================
贴一段post请求如何自定义header
- @RequestMapping("/headerApi")//模拟远程的restful API
- public JSONObject withHeader(@RequestBody JSONObject parm, HttpServletRequest req){
- System.out.println("headerApi====="+parm.toJSONString());
- Enumeration<String> headers = req.getHeaderNames();
- JSONObject result = new JSONObject();
- while(headers.hasMoreElements()){
- String name = headers.nextElement();
- System.out.println("["+name+"]="+req.getHeader(name));
- result.put(name, req.getHeader(name));
- }
- result.put("descp", "this is from header");
- return result;
- }
- @RequestMapping("/header")
- public Object postWithHeader(){
//该方法通过restTemplate请求远程restfulAPI- HttpHeaders headers = new HttpHeaders();
- headers.set("auth_token", "asdfgh");
- headers.set("Other-Header", "othervalue");
- headers.setContentType(MediaType.APPLICATION_JSON);
- JSONObject parm = new JSONObject();
- parm.put("parm", "1234");
- HttpEntity<JSONObject> entity = new HttpEntity<JSONObject>(parm, headers);
- HttpEntity<String> response = restTemplate.exchange(
- "http://localhost:8080/headerApi", HttpMethod.POST, entity, String.class);//这里放JSONObject, String 都可以。因为JSONObject返回的时候其实也就是string
- return response.getBody();
- }
Spring RestTemplate: 比httpClient更优雅的Restful URL访问, java HttpPost with header的更多相关文章
- Httpclient与RestTemplate的比较(比httpClient更优雅的Restful URL访问)
一.HttpClient (一)HttpClient 客户端 1.HttpClient 是 apache 的开源,需要引入两个包:httpclient-4.2.4.jar 和 httpcore-4.2 ...
- Spring RestTemplate介绍
http://www.cnblogs.com/rollenholt/p/3894117.html RestTemplate 这篇文章打算介绍一下Spring的RestTemplate.我这边以前设计到 ...
- Spring RestTemplate 专题
相同的参数(接口的入参json打印在日志了)在PostMan中返回预期的数据,但使用RestTemplate时去提示信息错误(参数中汉字).这种情况,搞得怀疑对RestTemplate的理解了使用Re ...
- Spring RestTemplate 的介绍和使用-入门
RestTemplate是什么? 传统情况下在java代码里访问restful服务,一般使用Apache的HttpClient.不过此种方法使用起来太过繁琐.spring提供了一种简单便捷的模板类来进 ...
- 如何更优雅地对接第三方API
本文所有示例完整代码地址:https://github.com/yu-linfeng/BlogRepositories/tree/master/repositories/third 我们在日常开发过程 ...
- Spring restTemplate
什么是RestTemplate RestTemplate是Spring提供的用于访问Rest服务的客户端,提供了多种便捷访问远程HTTP服务的方法,能够大大提高客户端的编写效率. 项目中注入Res ...
- Spring RestTemplate 小结
关于RestTemplate 首先,你可以把它理解为一个发起请求并接收响应的工具类(功能类似浏览器). 其次,它其实是一个壳,具体还是通过调用别的接口来实现(如jdk自带的连接,或者HttpClien ...
- git rebase VS git merge? 更优雅的 git 合并方式值得拥有
写在前面 如果你不能很好的应用 Git,那么这里为你提供一个非常棒的 Git 在线练习工具 Git Online ,你可以更直观的看到你所使用的命令会产生什么效果 另外,你在使用 Git 合并分支时只 ...
- Spring RestTemplate详解
Spring RestTemplate详解 1.什么是REST? REST(RepresentationalState Transfer)是Roy Fielding 提出的一个描述互联系统架构风格 ...
随机推荐
- Window 对象详解 转自 http://blog.csdn.net/jcx5083761/article/details/41243697
详解HTML中的window对象和document对象 标签: HTMLwindowdocument 2014-11-18 11:03 5884人阅读 评论(0) 收藏 举报 分类: HTML& ...
- CentOS安装NodeJS及Express开发框架
http://zhaohe162.blog.163.com/blog/static/38216797201402234212981/ express 命令行工具 npm install -g ex ...
- EUI List列表实现人物列表
一 Scroll+List ,拖动组件到exml. List不能写定高度,不然无法自动扩展. 二 新建List条目皮肤, ListItemSkin皮肤 名字Label的文本{data.name} ...
- SpringMVC无法获取请求中的参数的问题的调查与解决(1)
*更新:本文第一版中犯了比较大的错误,无论@RequestBody还是@RequestParam注解一样,都会使用全局的Encoding进行解码,会导致特殊编码的参数值丢失. 只要抛弃掉注解,就完全可 ...
- 把内容生成txt文件
StringBuilder MailLog = new StringBuilder(); string logPath = txtFile + str + DateTime.No ...
- jQuery iframe之间相互调用
,子iframe内调用父类函数方法: window.parent.func(); ,子Iframe中获取父界面的元素: $("#xx", window.parent.documen ...
- favicon.ico应用与正则表达式验证邮箱(可自动删除前后的空格)
1.favicon.ico制作:favicon.ico可以ps制作;“shortcut icon”中间有一个空格 <head> <link rel="shortcut ic ...
- 智慧城市的【Auth】登录对象
从Auth对象看前端:1.将与Auth对象相关的功能分离出来.所含的内容包括:[个人中心相关信息的显示,注册,登录,忘记密码,修改密码,个人信息修改]. 2.从“我的”页面开始,显示使用哪儿的数据,需 ...
- Python全栈开发day8
一.python生成/迭代器 yiled生成数据 python迭代器, 访问数据(通过next一次一次去取) 二.反射 通过字符串的形式,导入模块 通过字符串的形式,到模块中,寻找指定的函数,并执行 ...
- Makefile <网络转载>
陈皓 (CSDN)概述——什 么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和 professional的 ...