尽管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)操作。
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全限定名。
与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
注释用于将请求映射到一个类或一个处理程序的方法。
在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模板允许提及一个模板@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!";
}
注释 @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。
注释 @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);
...
}
.....
.....
}
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有