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学习网(javalearns)

原文发表时间:2016-08-08

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏玩转JavaEE

初识Spring Boot框架

按:最近公众号文章主要是整理一些老文章,主要是个人CSDN上的博客,也会穿插一些新的技术点。 ---- 前面的铺垫文章已经连着写了六篇了,主要是介绍了Sprin...

39850
来自专栏微信公众号:Java团长

初识Spring Boot框架

前面的铺垫文章已经写了几篇了,主要是介绍了Spring和SpringMVC框架,小伙伴们在学习的过程中大概也发现了这两个框架需要我们手动配置的地方非常多,不过做...

11840
来自专栏惨绿少年

NFS启动时报错Linux NFS:could not open connection for tcp6

1.1 启动时出现的错误 [root@znix ~]#/etc/init.d/nfs start Shutting down NFS daemon:     ...

22900
来自专栏吴伟祥

使用Idea迅速构建一个Spring Boot应用与部署

1、选择File->New->Project,在对话框中选中Spring Initializr,给项目配置合适的SDK,点击Next.

26340
来自专栏闻道于事

使用Spring Initializr创建项目

Spring initializr 是Spring 官方提供的一个很好的工具,可以用来用来创建一个Spring boot 的项目。可以选择使用Maven管理或者...

44250
来自专栏代码拾遗

Spring Cloud 教程 - Eureka Server

将groupId 为 org.springframework.cloud,artifactId 为spring-cloud-starter-netflix-eu...

22140
来自专栏栗霖积跬步之旅

关于打包后提示无法连接到mongodb的情况

昨天晚上要和前端联调。 打完jar包后发现无法连接到测试环境的数据库。 就很尴尬,最后发现问题在于mongodb的URI写错了: 正确的URI格式:mongod...

38550
来自专栏程序猿DD

使用Intellij中的Spring Initializr来快速构建Spring Boot/Cloud工程

在之前的所有Spring Boot和Spring Cloud相关博文中,都会涉及Spring Boot工程的创建。而创建的方式多种多样,我们可以通过Maven来...

23380
来自专栏阿杜的世界

Spring Boot的自动配置、Command-line Runner

接下来关于SpringBoot的一系列文章和例子,都来自《Spring Boot Cookbook》这本书,本文的主要内容是start.spring.io的使用...

9320
来自专栏编程

Spring-Data-REST轻松搞定RESTfulAPI

背景 昨天同事问我有没有研究过 ,没有~但是看名字就大概知道是做什么的(命名的重要性),因为之前有了解过 ,过一会发过两个截图过来。真的很强大,感觉这个在使用...

29160

扫码关注云+社区

领取腾讯云代金券