2.Spring构建REST Web Service
上篇文章我们已经对Spring 已经有了一个初步的认识,接下来本篇文章我们将继续一起在官网学习新技术。 原文地址:https://spring.io/guides/gs/rest-service/
本指南指导您使用Spring创建一个“Hello World”REST Web Service 的过程。
1. 你将会建立什么?
Tips: 上面已经提到,我们将使用Spring创建一个“Hello World”REST Web服务的过程,但是最终的效果是什么样呢?
我们将构建一个接受HTTP GET请求的服务:
http://localhost:8080/greeting
当我们发出上面的Http Get 请求后,会响应返回下面的JSON 内容。
{"id":1,"content":"Hello, World!"}
我们也可以带一个参数进行请求
http://localhost:8080/greeting?name=User
Name参数值重写“Word”的默认值,并反映在响应中:
{"id":1,"content":"Hello, User!"}
2. 你将需要准备什么?
大约十五分钟
一个喜欢的文本编辑器或者IDE
JDK 1.8 or later
You can also import the code straight into your IDE:
3.如何完成本指南?
像大多数Spriing 入门指南一样,你可以从头开始,完成每一步,或者你可以绕过已经熟悉的基本设置步骤。不管怎样,你最终都会得到工作代码
3.1 获取工作代码
a.使用Maven构建
b. 使用Gradle构建
c. 使用IDE构建
阅读怎么使用 Spring Tool Suite.构建
阅读怎么使用 IntelliJ IDEA 构建
d. 点击下载 然后 解压仓库源码
e. 使用git 克隆
git clone https://github.com/spring-guides/gs-rest-service.git
上面有五种方法,但是由于之后我们会经常使用IDE来完成这些操作,所以这里我们使用IDE 来构建入门指南项目
3.1.1 用STS开始入门指南
本指南引导您使用Spring工具套件(STS)构建一个入门指南。
3.1.1.1 你将会构建什么?
您将选择Spring指南并将其导入Spring Tool Suite。然后你可以阅读指南,处理代码,运行项目。
3.1.1.2 你需要什么?
大约15分钟
JDK 8 或者更高
3.1.1.3 安装STS
如果你还没有安装STS,请访问上面的链接。从那里,您可以下载一个副本为您的平台。要安装它,只需解压缩下载的存档文件。
当你完成后,继续登陆 STS
3.1.1.4 导入入门指南
使用STS启动并运行,从文件菜单打开Import Spring Getting Started Content 向导。
点击File ——> New ————> Import Spring Geting Started Content
然后会弹出来一个窗口向导,将为您提供从Spring网站搜索和挑选任何已发布指南的机会。
你可以浏览列表,或者输入搜索词来立即过滤选项。
当提供即时搜索结果时,该标准适用于标题和描述。支持通配符。
输入rest ,选择 Rest Service ,点击Finish
您可以选择Maven或Gradle作为构建系统来使用。
您还可以决定是否抓取初始代码集、完成代码集,或两者兼而有之。
对于大多数项目,
- (initial)初始代码集是一个空的项目,使得您可以通过指南复制和粘贴您的方式
- (Complete)完整的代码集是来自已经进入的指南的所有代码。如果你抓住这两个,你可以比较你的工作与指南的差异。
最后,你可以让STS向网站上的指南打开浏览器标签。这会让你在不离开STS的情况下通过向导工作。
STS将在您的工作区中创建两个新项目,导入消耗REST代码库(初始和完整),并在STS中打开浏览器选项卡,如下所示:
Tips:
gs-rest-service-complete 是完成后的项目
gs-rest-service-initial 是初始化一个空的项目
3.1.2 用Intellij Idea 开始入门指南
本指南指导您使用Intellij Idea 构建一个入门指南。
3.1.2.1 你将会构建什么?
你会选择一个Spring指南并导入到iTeliJ的想法中。然后你可以阅读指南,处理代码,运行项目。
3.1.2.2 你需要准备什么?
15分钟
JDK 6 或者更高
3.1.2.3 安装 IntelliJ IDEA
如果你还没有安装 IntelliJ IDEA (Ultimate Edition) ,请访问上面的链接。从那里,您可以下载一个副本为您的平台。要安装它,只需解压缩下载的存档文件。
当你完成后,继续启动Intellij IDEA
3.1.2.4 导入入门指南
要导入现有的项目,需要一些代码,
或者使用Git 克隆或复制其中一个入门指南,例如REST服务指南:
git clone https://github.com/spring-guides/gs-rest-service.git
下载解压后如图所示
使用Intellij IDEA 启动和运行,点击欢迎屏幕上的导入项目,或在主菜单上打开文件:
在弹出对话框中,确保在完整文件夹下选择Maven的POM.xml或Gradle的build.gradle文件:
这里我们选择build.gradle
Intellij IDEA 将创建一个项目,所有的代码从指南准备运行。
保持默认,点击OK
构建完成后如图所示
3.2 创建资源表示类
既然已经建立了项目并建立了系统,就可以创建Web服务。
通过考虑服务交互来开始这个过程。
服务将处理查询t /greeting GET 请求,可选地在查询字符串中使用name参数。GET请求应该返回一个200 OK响应,其中JSON在表示greetin的主体中。它应该看起来像这样:
{
"id": 1,
"content": "Hello, World!"
}
ID字段是问候语的唯一标识符,content是问候语的文本表示。
为了建模问候语表示,您创建一个资源表示类。提供一个字段,构造函数普通java对象,并为ID和content数据访问:
src/main/java/hello/Greeting.java
package hello; public class Greeting {
private final long id;
private final String content; public Greeting(long id, String content) {
this.id = id;
this.content = content;
} public long getId() {
return id;
}
public String getContent() {
return content;
}
}
正如您在下面的步骤中看到的,Spring使用Jackson JSON库自动将问候类型的实例封送到JSON中。
接下来,创建将为这些问候服务的资源控制器。
3.3 创建资源Controller
在Spring构建REST Web服务的方法中,HTTP请求由控制器处理。这些组件很容易被@ RESTController注释标识,下面的GreetingController通过返回Greeting 类的新实例来处理GET请求/greeting:
src/main/java/hello/GreetingController.java
package hello; import java.util.concurrent.atomic.AtomicLong; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController; @RestController
public class GreetingController {
private static final String template = "Hello, %s!";
private final AtomicLong counter = new AtomicLong(); @RequestMapping("/greeting")
public Greeting greeting(@RequestParam(value="name", defaultValue="World") String name) {
return new Greeting(counter.incrementAndGet(),
String.format(template, name));
}
}
这个控制器简洁明了,但引擎盖下还有很多事情要做。让我们一步一步地打破它。
@RequestMapping 注解 确保将HTTP请求 /greeting映射到 greeting()方法。
上面的示例不指定GET、PUT、POST等等,因为@RequestMapping 默认映射所有HTTP操作。使用@RequestMapping(Method= GET)来缩小此映射。
@RequestParam将查询字符串参数name 的值绑定到greeting()方法的name参数中。 如果请求中缺少name参数,则使用“World”的默认值。
方法体的实现基于计数器的下一个值创建并返回一个带有id和content属性的新Greeting对象,并使用问候template 格式化给定name。
传统的MVC控制器和上面的RESTful Web服务控制器之间的一个主要区别在于HTTP响应主体的创建方式。
这个RESTful Web服务控制器只需填充并返回一个Greeting对象,而不是依赖视图技术将问候数据的服务器端呈现呈现给HTML。
对象数据将作为JSON直接写入HTTP响应。
此代码使用Spring 4的新的@RestController注释,该注释将类标记为控制器,其中每个方法都返回一个域对象而不是视图。 它是@Controller和@ResponseBody的缩写。
@RestController = = @Controller + @ResponseBody
Greeting对象必须转换为JSON。 由于Spring的HTTP消息转换器支持,您不需要手动执行此转换。
由于Jackson 2位于classpath中,因此会自动选择Spring的MappingJackson2HttpMessageConverter将Greeting实例转换为JSON。
3.4 使应用程序可执行
虽然可以将此服务作为传统WAR文件打包以部署到外部应用程序服务器,但下面演示的更简单的方法会创建独立应用程序。
您将所有内容打包到一个单独的,可执行的JAR文件中,由一个良好的旧Java main()方法驱动。
一路上,您使用Spring的支持将Tomcat servlet容器作为HTTP运行时嵌入,而不是部署到外部实例。
src/main/java/hello/Application.java
package hello; import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
SpringBootApplication是一个方便的注解,它增加了以下所有内容:
- @Configuration将类标记为应用程序上下文的bean定义的来源。
- @EnableAutoConfiguration通知Spring Boot根据类路径设置,其他bean和各种属性设置开始添加bean。
- 通常你会为Spring MVC应用程序添加@EnableWebMvc,但Spring Boot在类路径中看到spring-webmvc时会自动添加。 这将该应用程序标记为Web应用程序并激活关键行为,例如设置DispatcherServlet。
- @ComponentScan告诉Spring在hello包中查找其他组件,配置和服务,以便找到控制器。
main()方法使用Spring Boot的SpringApplication.run()方法启动应用程序。你有没有注意到没有一行XML? 没有web.xml文件。这个Web应用程序是100%纯Java,您不必处理配置任何管道或基础设施。
3.5 构建一个可执行的JAR
您可以使用Gradle或Maven从命令行运行应用程序。 或者您可以构建一个包含所有必需的依赖项,类和资源的可执行JAR文件,并运行该文件。 这使得在整个开发生命周期内跨越不同环境等,将服务作为应用程序发布,版本化和部署变得非常容易。
如果您正在使用Gradle,则可以使用./gradlew bootRun运行该应用程序。 或者您可以使用./gradlew构建构建JAR文件。 然后你可以运行JAR文件:
java -jar build/libs/gs-rest-service-0.1.0.jar
如果您使用的是Maven,则可以使用./mvnw spring-boot:run来运行该应用程序。 或者,您可以使用./mvnw clean包构建JAR文件。 然后你可以运行JAR文件:
java -jar target/gs-rest-service-0.1.0.jar
上述过程将创建一个可运行的JAR。 您也可以选择构建经典的WAR文件。
记录输出显示。 该服务应该在几秒钟内启动并运行。
3.6 测试 service
现在这个service已经启动,我们访问 http://127.0.0.1:8080/greeting 你将会看到这样的结果
{"id":1,"content":"Hello, World!"}
提供一个name参数进行查询,访问 http://localhost:8080/greeting?name=User
{"id":2,"content":"Hello, User!"}
注意content 文本内容已经从 "Hello ,World!" 变成了" Hello, User!"
此更改演示了GreetingController中的@RequestParam排列按预期工作。 name参数已被赋予默认值“World”,但始终可以通过查询字符串显式覆盖。
还要注意id属性如何从1更改为2.这证明您正在针对多个请求中的同一个GreetingController实例工作,并且它的计数器字段按照预期在每次调用时递增。
恭喜! 您刚刚用Spring开发了一个RESTful Web Service。
2.Spring构建REST Web Service的更多相关文章
- 构建一个基于 Spring 的 RESTful Web Service
本文详细介绍了基于Spring创建一个“hello world” RESTful web service工程的步骤. 目标 构建一个service,接收如下HTTP GET请求: http://loc ...
- 使用Apache CXF和Spring集成创建Web Service(zz)
使用Apache CXF和Spring集成创建Web Service 您的评价: 还行 收藏该经验 1.创建HelloWorld 接口类 查看源码 打印? 1 package ...
- [翻译]Spring MVC RESTFul Web Service CRUD 例子
Spring MVC RESTFul Web Service CRUD 例子 本文主要翻译自:http://memorynotfound.com/spring-mvc-restful-web-serv ...
- 翻译-使用Spring调用SOAP Web Service
原文链接: http://spring.io/guides/gs/consuming-web-service/ 调用SOAP web service 本指南将指导你使用Spring调用一个基于SOAP ...
- Apache CXF实战之四 构建RESTful Web Service
Apache CXF实战之一 Hello World Web Service Apache CXF实战之二 集成Sping与Web容器 Apache CXF实战之三 传输Java对象 这篇文章介绍一下 ...
- 使用CXF框架集成Spring实现SOAP Web Service
- Spring Boot 构建一个 RESTful Web Service
1 项目目标: 构建一个 web service,接收get 请求 http://localhost:8080/greeting 响应一个json 结果: {"id":1,&qu ...
- Building a RESTful Web Service Using Spring Boot In Eclipse
一.构建restful web service 创建Maven的java web工程,maven的pom文件加入依赖包 创建包hello Greeting.java package hello; pu ...
- 使用 Spring 3 MVC HttpMessageConverter 功能构建 RESTful web 服务
原文地址:http://www.ibm.com/developerworks/cn/web/wa-restful/ 简介: Spring,构建 Java™ 平台和 Enterprise Edition ...
随机推荐
- 嵌入式C开发---用循环实现左移右移
//将n左移m位 int byte_to_left_move(int n , int m) { int i , ret = 1 ; if(n == 0 || n < 0) { return ; ...
- android的左右侧滑菜单实现
最近看了很多app应用都采用的是左右侧滑,比如网易新闻.凡客等 这里也试着写一下侧滑 首先看一下效果 然后给出xml布局代码 <RelativeLayout xmlns:android=&quo ...
- Mybatis #和$
在mybatis的mapper文件中,对于传递的参数我们一般是使用#和$来获取参数值. 当使用#时变量是占位符,就是一般我们使用java jdbc的PrepareStatement时的占位符?,所有可 ...
- objective-c如何在linux下进入Modern模式
自从apple的obj-c进入2.0后,出现了相对于Legacy模式的Modern模式:Modern模式中出现了一些高级功能(比如ARC),并且出现了一些新的字面语法,新旧模式的差别可以参考apple ...
- 如何在ubuntu开启ssh服务-使 SecureCRT远程登录
不少人在第一次使用ubuntu系统的时候,用了很多种方法均没有办法开启SSH服务,ubuntu和其它的linux系统有所区别,因为在ubuntu下,service sshd restart 之类 ...
- C语言之多线程机制(程序可以同时被执行而不会相互干扰)
接触过linux的人或多或少知道,linux有多线程的机制,也就是说程序可以同时执行,不受干扰,关于这个在我以前的博文里有过类似模拟的时间片轮转程序,跟这个其实是类似的.其实在window上,线程的头 ...
- 解读Raft(三 安全性)
前言 之前的两篇文章更多的是在描述Raft算法的正常流程,没有过多的去讨论异常场景. 而实际在分布式系统中,我们更多的都是在应对网络不可用.机器故障等异常场景,所以本篇来讨论一下Raft协议的安全性, ...
- linux上搭建ftp服务器
摘要 vsftpd 是"very secure FTP daemon"的缩写,安全性是它的一个最大的特点.vsftpd 是一个 UNIX 类操作系统上运行的服务器的名字,它可以运行 ...
- spring boot之入门Controller常用注解
Controller常用注解 @Controller 处理http请求 @RestController Spring4之后新加的注解,原来返回json数据需要@ResponseBody配合@Cont ...
- 你必须知道的261个Java语言问题
1. Java语言的运行机制: Java既不是编译型语言也不是解释型语言,它是编译型和解释型语言的结合体.首先采用通用的java编译器将Java源程序编译成为与平台无关的字节码文件(class文件), ...