构建一个REST风格的Web服务(Building a RESTful Web Service)

本指南将引导你完成使用Spring创建“hello World”RESTful Web服务的过程。

创建一个资源表示类

该服务将处理GET请求/greeting,可选地使用查询字符串中的name参数。改GET请求应该返回200 OK的响应,和表示问候的JSON格式的正文。它应该看起来像这样:

{
    "id": 1,
    "content": "Hello, World!"
}

id字段是问候语的唯一标识符,content是问候语文字表示。

要建模问候表示,你创建一个资源表示类。提供一个普通java对象,有字段,构造函数,id和content数据的访问器。

package com.example.demo.entity;

public class Greeting {
    private long id;
    private 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使用JSON库自动将Greeting类型的实例序列化为JSON。

接下来,创建提供这些问候的资源控制器。

创建一个资源控制器

这个控制器简洁明了,但有很多事情发生在幕后。让我们一步一步地把它分解。

@RequestMapping 注释确定将http请求 /greeting 映射到 greeting() 方法。

上面的例子没有指定GET、PUT、POST,因为@RequestMapping 默认映射所有的http操作。使用@RequestMapping(method=GET) 来缩小这种映射。

@RequestParam 将查询字符串参数 name 的值绑定到 greeting() 方法的 name 参数。这个查询字符串参数被显式地标记为可选(required=true 默认):如果请求中缺少,defaultValue 默认值“World”被使用。

方法体的实现,创建并返回一个新的 Greeting 对象,使用 idcontent属性,id 基于 counter 的下一个值,content 基于把给定的 name 使用欢迎 template 格式化的值。

传统的MVC控制器和上面的RESTful web服务控制器之间的关键区别是http响应体的创建方式。RESTful web service controller 不依赖视图技术,在服务端执行将数据渲染成HTML,而是简单地填充并返回一个 Greeting对象。对象数据将以json形式直接写入http响应。

这段代码使用了Spring4的新注释@RestController,它将类标记为一个控制器,其中每个方法都返回一个域对象而不是一个视图。它是@Controller和@ResponseBody的速记(缩写)。

Greeting对象必须转换为json。由于Spring的HTTP消息转换器(Spring’s HTTP message converter)支持,你不需要手动执行此转换。因为 Jackson 2 在类路径上,SpringMappingJackson2HttpMessageConverter 被自动选择将 Greeting 实例转换为JSON。

使应用程序可执行

尽管可以打包此服务成传统传统WAR文件,部署到外部应用服务器;但下面演示的更简单的方法,创建一个独立的应用程序。你把所有内容打包到一个单独的、可执行的JAR文件中,由一个好的旧Java main() 方法驱动。在此过程中,你使用Spring支持的内置的Tomcat servlet容器作为HTTP运行时,而不是部署到外部实例。

srcmainjavacomexampledemoRestfulWebServiceApplication.java

package com.example.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class RestfulWebServiceApplication {

    public static void main(String[] args) {
        SpringApplication.run(RestfulWebServiceApplication.class, args);
    }
}

@SpringBootApplication是一个方便的注释,它包括@Configuration@EnableAutoConfiguration@EnableWebMvc@ComponentScan

@Configuration将该类标记为应用程序上下文的bean定义的来源。

@EnableAutoConfiguration告诉Spring Boot根据类路径设置、其他bean、各种属性设置,添加bean。

通常情况下,你需要为一个Spring MVC应用添加@EnableWebMvc,但是Spring Boot在classpath(类路径)中看到 spring-webmvc 时自动添加它。这将该应用程序标记为Web应用程序,并激活关键行为,如设置DespatcherServlet

@ComponentScan告诉Spring在该类属于的包(com.example.demo)中查找其他组件、配置、服务,以便找到控制器。

main()方法使用 Spring Boot 的 SpringApplication.run() 方法来启动应用程序。

你有没有注意到没有一行XML?没有web.xml。这个Web应用程序是100%纯Java,你不必配置任何管道或基础设施。

构建一个可执行的JAR

你可以使用Maven从命令行运行应用程序。或者你可以构建一个包含所有必需的的依赖项,类和资源的单一的可执行JAR文件,然后运行该文件。这使得在整个开发生命周期中、在不同的环境中,运送、版本化和将服务作为应用程序发布,变得容易。

如果你正在使用Maven,你可以使用 ./mvnw spring-boot:run 运行该应用程序。或者你可以用 ./mvnw clean package 构建JAR文件。然后你可以运行JAR文件:

java -jar target/restfulwebservice-0.1.0.jar

上面的过程将创建一个可运行的JAR。你也可以选择构建一个经典的WAR文件。

显示日志输出。该服务应该在几秒钟内启动并运行。

测试服务

现在服务已经启动, 访问 http://localhost:8080/greeting ,在这里你看到:

{"id":1,"content":"Hello, World!"}

提供查询字符串参数 name ,http://localhost:8080/greeting?name=User。

注意 content 属性的值是,如何从“Hello,World!”变为“Hello User!”:

{"id":2,"content":"Hello, User!"}

这一变化表明,GreetingController 中配置的 @RequestParam 按预期地工作着。name参数被赋予了默认值“World”,但总是可以通过查询字符串被显式覆盖。

注意 id 属性如何从1变为2。这证明,跨多个请求处理,倚靠同一个实例(GreetingController),并且它的 counter 字段在每次调用时递增,按预期地。

概要

恭喜!您刚刚用Spring开发了一个RESTful Web服务。

参考资料:Building a RESTful Web Service

源码:https://gitee.com/SevenDayBabyface/demo

原文地址:https://www.cnblogs.com/xsj891107/p/7986273.html