Spring 3.0支持基于rest的Web服务学习总结

时间:2022-04-29
本文章向大家介绍Spring 3.0支持基于rest的Web服务学习总结,主要内容包括RESTful Web服务使用jax - rs、RESTful Web服务使用Spring、URI模板、Spring注释:@PathVariable、Spring注释:@RequestParam、基本概念、基础应用、原理机制和需要注意的事项等,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。

尽管RESTful功能被添加到Spring MVC框架非常早期通过注释和其他API功能,支持基于rest的Web服务是Spring MVC有点晚。几个jax - rs(RESTful Web服务的Java API)实现,比如Restlet RESTEasy和球衣支持rest风格的Web服务,但Spring社区没有添加到Spring 3.0支持rest风格的Web服务功能。在这篇文章中,我讨论了Spring 3.0支持开发RESTful Web服务,检查类和注释。

快速复习,RESTful Web服务的Web服务创建和访问使用REST(REpresentational State Transfer)原则。RESTful Web服务,使用HTTP方法的操作执行,可以很容易地访问使用统一资源标识符(uri)。HTTP方法 POST, GET, PUT DELETE可以映射到创建、读取、更新和删除(CRUD)操作。

RESTful Web服务使用jax - rs

jax - rs是一个Java编程API(JSR 311)作为Java EE平台的一部分。jax - rs是为了方便开发Java应用程序使用REST原则和架构,使用注释,jax - rs开发人员可以简单的pojo公开为Web资源。jax - rs应用程序打包为WAR文件和其他在Java和Web应用程序部署在一个容器,它支持Java Servlet API。

在Java开发jax - rs应用程序的方法之一是使用泽西岛一个开源,生产型jax - rs的参考实现。泽西实现的所有api,它提供了快速便捷的创建Java注释使用REST样式的Web服务。它还提供了很多附加功能有自己的API喜欢Jersey客户端API。RESTful Web服务,泽使用HTTP Web服务器被称为灰熊。请求这个容器被灰熊Servlet处理,与com.sun.jersey.spi.container.servlet.ServletContainer全限定名。

RESTful Web服务使用Spring

与Spring MVC支持rest式Web服务、Java开发人员可以构建RESTful应用程序使用注释,注释的继承Spring的Web MVC框架。客户端支持RESTful应用程序创建RestTemplate提供的API,这是概念上非常类似于像JdbcTemplate和JmsTemplate类。HttpConverters类提供的其他功能,这有助于将对象转换为他们在HTTP请求和响应的表征,反之亦然。为了实现对象和XML之间的映射,Spring提供了MarshallingHttpMessageConverter类。

Spring Web MVC使用DispatcherServlet调度请求处理程序。默认的处理程序是确定使用 @Controller @RequestMapping注释。这些注释发挥重要作用在开发RESTful应用程序春天,实际上是基本(连同 @PathVariable在春天注释)RESTful的功能。的 @Controller注释是用来标记一个POJO作为控制器,而 @RequestMapping注释用于将请求映射到一个类或一个处理程序的方法。

春天控制器和基于rest的Web服务

在Spring Web MVC控制器代表了“C”。他们帮助处理用户输入,并将其转换为一个模型为用户通过视图。控制器可以使用声明 @Controller注释。通常,使用该注释的类标记特定类作为一个控制器。

@Controller
public class StockController {
   private final Stock stock;

   @AutoWired
   public StockController(Stock stock) {
      this.stock = stock;
   }

   @RequestMapping("/")
   public void stockInfo() {
   }

   @RequestMapping("/stockdetails")
   public String getStockDetails() {
      return this.stock.getStockDetails();
   }
}

注释 @RequestMapping不需要在类级别,它可以提到在方法级别。调用适当的方法处理程序根据绝对路径。

URI模板

URI模板是一个模板来保存一个URI字符串。通常,一个URI模板变量,这些变量替换值时,他们成为实际的URI。URI模板允许提及一个模板@RequestMapping注释。

例如,URI http://www.helloworld.com/users/ { username }提到一个URI模板,允许一个替代用户的用户名与实际名称比如http://www.helloworld.com/users/john。处理程序比较实际的URI与URI模板和适当的替代品的参数。

@RequestMapping(value="/users/{username}", method=RequestMethod.GET)
public String sayHello(Model model) {
   ......
   return "Hello, Welcome!";
}

Spring注释:@PathVariable

注释 @PathVariable用于绑定URI模板变量方法参数。在上一个示例中,URI模板变量用户名可以绑定到用户名的方法参@PathVariable注释。方法参数类型声明 @PathVariable不是只限制字符串;他们可以是任何原始数据类型,如int,长,双等。

@RequestMapping(value="/users/{username}", method=RequestMethod.GET)
public String sayHello(@PathVariable("username") String userName, Model model) {
   ......
   return "Hello "+userName+", Welcome!";
}

可以绑定多个URI模板变量方法参数。

@RequestMapping(value="/users/{username}/city/{cityname}", method=RequestMethod.GET)
public String sayHello(@PathVariable("username") String userName, @PathVariable("cityname")  String cityName, Model model) {
   ......
}

URI模板变量也可以来自于相对路径。

@Controller
@RequestMapping(value="/users/{username}")
public class SayHelloController {

   @RequestMapping(value="/city/{cityname}")
   public String sayHello(@PathVariable("username") String userName, @PathVariable("cityname")  String cityName, Model model) {
   ......
   }
}

像myParam = paramValue也支持参数化的条件,在请求映射只有参数给定paramValue。

Spring注释:@RequestParam

注释 @RequestParam用于将请求参数绑定到一个方法参数的控制器。同样,注释 @RequestBody用于显示参数绑定到HTTP请求中的值的身体。同时发送响应,注释 @ResponseBody也可以用来返回HTTP响应中的值的身体。

@Controller
@RequestMapping("/stockquote")
public class StockController {
   .....

   @RequestMapping(method=RequestMethod.GET)
   public double getStockPrice(@RequestParam("stockSymbol") String stockSymbol, Model model) {
      ...
      model.setAttribute("stockSymbol", stockSymbol);
      ...
   }
   .....
   .....
}