zoukankan      html  css  js  c++  java
  • 构建一个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

  • 相关阅读:
    MYSQL新特性secure_file_priv对读写文件的影响
    weblogic反序列化漏洞CVE-2018-2628-批量检测脚本
    WebLogic WLS-WebServices组件反序列化漏洞—Linux可执行反弹一句话版本
    攻击溯源_一次断网事件的分析
    建立加密socks5转发的两种方法
    【原创】Flash XSS 挖掘
    【转载】SQL的注入类型
    【原创】批处理文本
    【转载】nmap 官方指南
    【转载】对抗 DDoS 攻击的 15 个方法
  • 原文地址:https://www.cnblogs.com/xsj891107/p/7986273.html
Copyright © 2011-2022 走看看