1. {
  2. "Author": "tomcat and jerry",
  3. "url":"http://www.cnblogs.com/tomcatandjerry/p/5899722.html"
  4. }

Spring RestTemplate, 使用java访问URL更加优雅,更加方便。

核心代码:

  1. String url = "http://localhost:8080/json";
  2. JSONObject json = restTemplate.getForEntity(url, JSONObject.class).getBody();

就这么简单,API访问完成了!

附上SpringBoot相关的完整代码:

  1. RestTemplateConfig.java
  2.  
  3. @Configuration
  4. public class RestTemplateConfig{
  5. @Bean
  6. public RestTemplate restTemplate(ClientHttpRequestFactory factory){
  7. return new RestTemplate(factory);
  8. }
  9.  
  10. @Bean
  11. public ClientHttpRequestFactory simpleClientHttpRequestFactory(){
  12. SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();
  13. factory.setReadTimeout(5000);//ms
  14. factory.setConnectTimeout(15000);//ms
  15. return factory;
  16. }
  17. }
  1. SpringRestTemplateApp.java
  2. @RestController
  3. @EnableAutoConfiguration
  4. @Import(value = {Conf.class})
  5. public class SpringRestTemplateApp {
  6.  
  7. @Autowired
  8. RestTemplate restTemplate;
  9.  
  10. /***********HTTP GET method*************/
  11. @RequestMapping("")
  12. public String hello(){
  13. String url = "http://localhost:8080/json";
  14. JSONObject json = restTemplate.getForEntity(url, JSONObject.class).getBody();
  15. return json.toJSONString();
  16. }
  17.  
  18. @RequestMapping("/json")
  19. public Object genJson(){
  20. JSONObject json = new JSONObject();
  21. json.put("descp", "this is spring rest template sample");
  22. return json;
  23. }
  24.  
  25. /**********HTTP POST method**************/
  26. @RequestMapping("/postApi")
  27. public Object iAmPostApi(@RequestBody JSONObject parm){
  28. System.out.println(parm.toJSONString());
  29. parm.put("result", "hello post");
  30. return parm;
  31. }
  32.  
  33. @RequestMapping("/post")
  34. public Object testPost(){
  35. String url = "http://localhost:8080/postApi";
  36. JSONObject postData = new JSONObject();
  37. postData.put("descp", "request for post");
  38. JSONObject json = restTemplate.postForEntity(url, postData, JSONObject.class).getBody();
  39. return json.toJSONString();
  40. }
  41.  
  42. public static void main(String[] args) throws Exception {
  43. SpringApplication.run(SpringRestTemplateApp.class, args);
  44. }
  45.  
  46. }

===============================

另外还支持异步调用AsyncRestTemplate

  1. @RequestMapping("/async")
  2. public String asyncReq(){
  3. String url = "http://localhost:8080/jsonAsync";
  4. ListenableFuture<ResponseEntity<JSONObject>> future = asyncRestTemplate.getForEntity(url, JSONObject.class);
  5. future.addCallback(new SuccessCallback<ResponseEntity<JSONObject>>() {
  6. public void onSuccess(ResponseEntity<JSONObject> result) {
  7. System.out.println(result.getBody().toJSONString());
  8. }
  9. }, new FailureCallback() {
  10. public void onFailure(Throwable ex) {
  11. System.out.println("onFailure:"+ex);
  12. }
  13. });
  14. return "this is async sample";
  15. }

================================

贴一段post请求如何自定义header

  1. @RequestMapping("/headerApi")//模拟远程的restful API
  2. public JSONObject withHeader(@RequestBody JSONObject parm, HttpServletRequest req){
  3. System.out.println("headerApi====="+parm.toJSONString());
  4. Enumeration<String> headers = req.getHeaderNames();
  5. JSONObject result = new JSONObject();
  6. while(headers.hasMoreElements()){
  7. String name = headers.nextElement();
  8. System.out.println("["+name+"]="+req.getHeader(name));
  9. result.put(name, req.getHeader(name));
  10. }
  11. result.put("descp", "this is from header");
  12. return result;
  13. }
  14. @RequestMapping("/header")
  15. public Object postWithHeader(){
        //该方法通过restTemplate请求远程restfulAPI
  16. HttpHeaders headers = new HttpHeaders();
  17. headers.set("auth_token", "asdfgh");
  18. headers.set("Other-Header", "othervalue");
  19. headers.setContentType(MediaType.APPLICATION_JSON);
  20.  
  21. JSONObject parm = new JSONObject();
  22. parm.put("parm", "1234");
  23. HttpEntity<JSONObject> entity = new HttpEntity<JSONObject>(parm, headers);
  24. HttpEntity<String> response = restTemplate.exchange(
  25. "http://localhost:8080/headerApi", HttpMethod.POST, entity, String.class);//这里放JSONObject, String 都可以。因为JSONObject返回的时候其实也就是string
  26. return response.getBody();
  27. }

Spring RestTemplate: 比httpClient更优雅的Restful URL访问, java HttpPost with header的更多相关文章

  1. Httpclient与RestTemplate的比较(比httpClient更优雅的Restful URL访问)

    一.HttpClient (一)HttpClient 客户端 1.HttpClient 是 apache 的开源,需要引入两个包:httpclient-4.2.4.jar 和 httpcore-4.2 ...

  2. Spring RestTemplate介绍

    http://www.cnblogs.com/rollenholt/p/3894117.html RestTemplate 这篇文章打算介绍一下Spring的RestTemplate.我这边以前设计到 ...

  3. Spring RestTemplate 专题

    相同的参数(接口的入参json打印在日志了)在PostMan中返回预期的数据,但使用RestTemplate时去提示信息错误(参数中汉字).这种情况,搞得怀疑对RestTemplate的理解了使用Re ...

  4. Spring RestTemplate 的介绍和使用-入门

    RestTemplate是什么? 传统情况下在java代码里访问restful服务,一般使用Apache的HttpClient.不过此种方法使用起来太过繁琐.spring提供了一种简单便捷的模板类来进 ...

  5. 如何更优雅地对接第三方API

    本文所有示例完整代码地址:https://github.com/yu-linfeng/BlogRepositories/tree/master/repositories/third 我们在日常开发过程 ...

  6. Spring restTemplate

    什么是RestTemplate RestTemplate是Spring提供的用于访问Rest服务的客户端,提供了多种便捷访问远程HTTP服务的方法,能够大大提高客户端的编写效率.   项目中注入Res ...

  7. Spring RestTemplate 小结

    关于RestTemplate 首先,你可以把它理解为一个发起请求并接收响应的工具类(功能类似浏览器). 其次,它其实是一个壳,具体还是通过调用别的接口来实现(如jdk自带的连接,或者HttpClien ...

  8. git rebase VS git merge? 更优雅的 git 合并方式值得拥有

    写在前面 如果你不能很好的应用 Git,那么这里为你提供一个非常棒的 Git 在线练习工具 Git Online ,你可以更直观的看到你所使用的命令会产生什么效果 另外,你在使用 Git 合并分支时只 ...

  9. Spring RestTemplate详解

    Spring RestTemplate详解   1.什么是REST? REST(RepresentationalState Transfer)是Roy Fielding 提出的一个描述互联系统架构风格 ...

随机推荐

  1. Window 对象详解 转自 http://blog.csdn.net/jcx5083761/article/details/41243697

    详解HTML中的window对象和document对象 标签: HTMLwindowdocument 2014-11-18 11:03 5884人阅读 评论(0) 收藏 举报 分类: HTML& ...

  2. CentOS安装NodeJS及Express开发框架

    http://zhaohe162.blog.163.com/blog/static/38216797201402234212981/   express 命令行工具 npm install -g ex ...

  3. EUI List列表实现人物列表

    一  Scroll+List ,拖动组件到exml. List不能写定高度,不然无法自动扩展.  二 新建List条目皮肤, ListItemSkin皮肤 名字Label的文本{data.name} ...

  4. SpringMVC无法获取请求中的参数的问题的调查与解决(1)

    *更新:本文第一版中犯了比较大的错误,无论@RequestBody还是@RequestParam注解一样,都会使用全局的Encoding进行解码,会导致特殊编码的参数值丢失. 只要抛弃掉注解,就完全可 ...

  5. 把内容生成txt文件

    StringBuilder MailLog = new StringBuilder();            string logPath = txtFile + str + DateTime.No ...

  6. jQuery iframe之间相互调用

    ,子iframe内调用父类函数方法: window.parent.func(); ,子Iframe中获取父界面的元素: $("#xx", window.parent.documen ...

  7. favicon.ico应用与正则表达式验证邮箱(可自动删除前后的空格)

    1.favicon.ico制作:favicon.ico可以ps制作;“shortcut icon”中间有一个空格 <head> <link rel="shortcut ic ...

  8. 智慧城市的【Auth】登录对象

    从Auth对象看前端:1.将与Auth对象相关的功能分离出来.所含的内容包括:[个人中心相关信息的显示,注册,登录,忘记密码,修改密码,个人信息修改]. 2.从“我的”页面开始,显示使用哪儿的数据,需 ...

  9. Python全栈开发day8

    一.python生成/迭代器 yiled生成数据 python迭代器, 访问数据(通过next一次一次去取) 二.反射 通过字符串的形式,导入模块 通过字符串的形式,到模块中,寻找指定的函数,并执行 ...

  10. Makefile <网络转载>

    陈皓 (CSDN)概述——什 么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和 professional的 ...