上篇文章我们已经对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. 你将需要准备什么?

3.如何完成本指南?

像大多数Spriing 入门指南一样,你可以从头开始,完成每一步,或者你可以绕过已经熟悉的基本设置步骤。不管怎样,你最终都会得到工作代码

3.1 获取工作代码

a.使用Maven构建

b. 使用Gradle构建

c. 使用IDE构建

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 你需要什么?

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 你需要准备什么?

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。

源码下载:https://github.com/geekxingyun/JavaEE-Framework-Sample/tree/master/Spring-Build-Restful-Web-Service-Sample

2.Spring构建REST Web Service的更多相关文章

  1. 构建一个基于 Spring 的 RESTful Web Service

    本文详细介绍了基于Spring创建一个“hello world” RESTful web service工程的步骤. 目标 构建一个service,接收如下HTTP GET请求: http://loc ...

  2. 使用Apache CXF和Spring集成创建Web Service(zz)

    使用Apache CXF和Spring集成创建Web Service 您的评价:       还行  收藏该经验       1.创建HelloWorld 接口类 查看源码 打印? 1 package ...

  3. [翻译]Spring MVC RESTFul Web Service CRUD 例子

    Spring MVC RESTFul Web Service CRUD 例子 本文主要翻译自:http://memorynotfound.com/spring-mvc-restful-web-serv ...

  4. 翻译-使用Spring调用SOAP Web Service

    原文链接: http://spring.io/guides/gs/consuming-web-service/ 调用SOAP web service 本指南将指导你使用Spring调用一个基于SOAP ...

  5. Apache CXF实战之四 构建RESTful Web Service

    Apache CXF实战之一 Hello World Web Service Apache CXF实战之二 集成Sping与Web容器 Apache CXF实战之三 传输Java对象 这篇文章介绍一下 ...

  6. 使用CXF框架集成Spring实现SOAP Web Service

  7. Spring Boot 构建一个 RESTful Web Service

    1  项目目标: 构建一个 web service,接收get 请求 http://localhost:8080/greeting 响应一个json 结果: {"id":1,&qu ...

  8. Building a RESTful Web Service Using Spring Boot In Eclipse

    一.构建restful web service 创建Maven的java web工程,maven的pom文件加入依赖包 创建包hello Greeting.java package hello; pu ...

  9. 使用 Spring 3 MVC HttpMessageConverter 功能构建 RESTful web 服务

    原文地址:http://www.ibm.com/developerworks/cn/web/wa-restful/ 简介: Spring,构建 Java™ 平台和 Enterprise Edition ...

随机推荐

  1. Linux完整备份工具 - dump, restore(现在基本不用这两个)

    dump 其实 dump 的功能颇强,他除了可以备份整个文件系统之外,还可以制定等级喔!什么意思啊! 假设你的 /home 是独立的一个文件系统,那你第一次进行过 dump 后,再进行第二次 dump ...

  2. web报表工具FineReport的JS编辑框和URL地址栏语法简介

    JS编辑框: 1.FineReport的js. 作为一款BS产品,browser端的JavaScript是必不可少的. FineReport中的js是已经调用了finereport.js的. 大家知道 ...

  3. C# 设置Word文档背景(纯色/渐变/图片背景)

    Word是我们日常生活.学习和工作中必不可少的文档处理工具.精致美观的文档能给人带来阅读时视觉上的美感.在本篇文章中,将介绍如何使用组件Free Spire.Doc for .NET(社区版)给Wor ...

  4. mysql基础优化-explain的使用-mysql死锁

    MySQL的优化 主要包括三个方面,首先是SQL语句的优化,其次是表结构的优化(这里主要指索引的优化),最后是服务器配置的优化. 一.SQL语句的优化 在 where 及 order by 涉及的列上 ...

  5. Java数据结构面试题,输出 最后一个 出现次数为1的字符

    今天去面试,遇到一个数据结构题,给定一个字符串,输出 最后一个 出现次数为1的字符 回来研究了下,代码如下: package com.pine.interview.test; import java. ...

  6. Oracle表空间和表的常用操作指令

    查看端口号指令 netstat –a 设置: set pagesize 100; //设置每页显示的行数set linesize 200; //设置每页显示的字符数 空格也算col 列名A for a ...

  7. php namespace与use

    实验代码 ~/aa.php ~/bb.php 1.命名空间与文件加载的关系 本人在命名空间与文件加载上一直有一个误区,用了命名空间文件不用加载了? 实验1:去掉requre语句 可以看到就算使用命名空 ...

  8. Universal USB Installer – Easy as 1 2 3

    Universal USB Installer aka UUI is a Live Linux Bootable USB Creator that allows you to choose from ...

  9. Ocelot中文文档-缓存

    目前Ocelot使用CacheManager项目提供了一些非常基本的缓存.这是一个了不起的项目,它解决了很多缓存问题. 我会推荐这个软件包来做Ocelot缓存. 如果你看看这里的例子,你可以看到如何设 ...

  10. [ SSH框架 ] Struts2框架学习之一

    一.Struts2框架的概述 Struts2是一种基于MVC模式的轻量级Web框架,它自问世以来,就受到了广大Web开发者的关注,并广泛应用于各种企业系统的开发中.目前掌握 Struts2框架几乎成为 ...