Spring 3.0支持基于rest的Web服务学习总结
尽管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);
...
}
.....
.....
}
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- Flutter中ListView加载图片数据的优化
- Python 实现随机森林预测宽带客户离网(附源数据与代码)
- 嘿,你知道新冠疫情现在什么样了吗?
- 关于双目立体视觉的三大基本算法及发展现状的总结
- 权限维持之打造不一样的映像劫持后门
- SM3加密算法开源项目推荐
- 图片压缩原理
- 使用 Vue 3.0,你可能不再需要Vuex了
- ffmpeg视频处理神器学习基础笔记
- 5分钟就能做一个Excel动态图表,你确定不学学?(纯gif教学)
- 使用Logstash接收Netflow日志并发送到syslog服务器
- Flask搭建ES搜索引擎(二)
- Java 通过RestHighLevelClient 使用ES的date_histogram 根据年月日做统计
- Debug HashMap
- NSum及股票系列