>>分享孙卫琴的Java技术专稿和著作 书籍支持  卫琴直播  品书摘要  在线测试  资源下载  联系我们
发表一个新主题 开启一个新投票 回复文章 您是本文章第 12858 个阅读者 刷新本主题
 * 贴子主题:  【Spring专题】RestTemplate类与RESTFul风格的请求 回复文章 点赞(0)  收藏  
作者:sunweiqin    发表时间:2021-10-09 11:31:45     消息  查看  搜索  好友  邮件  复制  引用

本文参考《精通Spring:JavaWeb开发技术详解》,作者:孙卫琴,清华大学出版社出版

在实际软件开发过程中,前端与后端的开发团队分别开发各自的软件模块。对于采用RESTFul风格的Web应用,如果要等到前端与后端均开发完成自己的模块后,才能整体调试和运行程序,这会大大影响软件开发的效率。

Spring API提供了一个org.springframework.web.client.RestTemplate类,它支持在服务器端单独测试负责处理RESTFul风格的HTTP请求的控制器类。

RestTemplate类提供了一些方法,模拟客户端发出RESTFul风格的HTTP请求:
(1)新增操作:postForEntity(String url,Object request, Class<T> responseType, Object... uriVariables)
(2)更新操作:put(String url, Object request,Object... uriVariables)
(3)删除操作:delete(String url, Object...uriVariables)
(4)查询操作:getForObject(String url,Class<T> responseType, Object... uriVariables)

以上postForEntity()、put()、delete()和getForObject()方法分别采用POST、PUT、DELETE和GET请求方式,请求服务器端执行新增、更新、删除和查询操作。以上方法的url参数指定请求访问的URL,request参数表示请求正文数据,responseType参数指定返回数据的类型,uriVariables参数设定URL变量。

以下例程1的TestController类通过RestTemplate类来访问CustomerController类的各种请求处理方法。

例程1 TestController.java
@Controller
public class TestController {
  @Autowired
  private RestTemplate restTemplate;
  private String SERVICE_URL =  "http://localhost:8080/helloapp/customer";
  
@RequestMapping("/insert")
  publicString insert() {
    Customercustomer=new Customer();
    customer.setId(null);
    customer.setName("Linda");
    customer.setAge(18);

    // 发送POST请求
    StringResult result=restTemplate.postForObject(
                 SERVICE_URL ,customer,StringResult.class);

    System.out.println(result);
    return"result";
  }  

  @RequestMapping("/update")
  publicString update() {
    Customercustomer=new Customer();
    customer.setId(Long.valueOf(1L));
    customer.setName("Linda");
    customer.setAge(18);

    // 发送PUT请求
    restTemplate.put(SERVICE_URL+"/1" , customer);
    System.out.println("更新完毕");
    return"result";
  }

  @RequestMapping("/delete")
  publicString delete() {
    // 发送DELETE请求
    restTemplate.delete(SERVICE_URL+"/1");
    System.out.println("删除完毕");
    return"result";
  }

  @RequestMapping("/findone")
  publicString findById() {
    // 发送GET请求
    Customercustomer=restTemplate.getForObject(SERVICE_URL+"/1",
                                           Customer.class);
    if(customer!=null)
     System.out.println(customer.getId()+","
                      +customer.getName()+","+customer.getAge());
    return"result";
  }

  @RequestMapping("/findall")
  publicString findAll() {
    // 发送GET请求
    Customer[] customers=restTemplate
                  .getForObject(SERVICE_URL,Customer[].class);
   System.out.println("查询到"+customers.length+"个Customer对象");

   for(Customer c : customers)
     System.out.println(c.getId()+","+c.getName()+","+c.getAge());

    return"result";
  }
}

TestController类的restTemplate实例变量由Spring框架提供,在Spring的配置文件applicationContext.xml中配置了restTemplate Bean组件:

<bean id="restTemplate"
       class= "org.springframework.web.client.RestTemplate" />

通过浏览器访问以下URL:

http://localhost:8080/helloapp/insert
http://localhost:8080/helloapp/update
http://localhost:8080/helloapp/findone
http://localhost:8080/helloapp/findall
http://localhost:8080/helloapp/delete

以上URL会访问TestController类的相关方法,而这些方法又会通过RestTemplate类发出RESTFul风格的HTTP请求,请求访问CustomerController类的相关方法。


程序猿的技术大观园:www.javathinker.net
  Java面向对象编程-->异常处理
  JavaWeb开发-->JavaWeb应用入门(Ⅰ)
  JSP与Hibernate开发-->映射组成关系
  Java网络编程-->用Spring整合CXF发布Web服务
  精通Spring-->CSS过渡和动画
  Vue3开发-->CSS过渡和动画
  【Vue.js技术专题】分割setup()函数
  【Spring Cloud Alibaba专题】GateWay的内置断言工厂
  【Spring Cloud Alibaba专题】Seata的架构
  【Spring Cloud Alibaba专题】OpenFeign开启对请求和响应数据...
  【Spring专题】Spring MVC是否过时?
  【Spring专题】控制器对象的生命周期
  【持久化专题】@Access注解设定Hibernate访问类的属性的方式
  【持久化专题】JPA API的基本用法
  【持久化专题】FetchType.LAZY延迟检索策略
  【持久化专题】Spring与Hibernate与JPA的整合
  【Java网络编程专题】盘点用Java抓取HTTP服务器和FTP服务器的...
  【Java网络编程专题】创建基于SSL的安全服务器和安全客户的范...
  【Java网络编程专题】异步通道和异步运算结果
  【Java网络编程专题】优化访问数据库的程序代码的一些技巧
  【Java基础编程专题】Java集合的批量操作
  更多...
 IPIP: 已设置保密
树形列表:   
1页 0条记录 当前第1
发表一个新主题 开启一个新投票 回复文章


中文版权所有: JavaThinker技术网站 Copyright 2016-2026 沪ICP备16029593号-2
荟萃Java程序员智慧的结晶,分享交流Java前沿技术。  联系我们
如有技术文章涉及侵权,请与本站管理员联系。