zoukankan      html  css  js  c++  java
  • 跟着Spring官网学习(2): Building a RESTful Web Service

    Spring官方网站原文地址:https://spring.io/guides/gs/rest-service/

    本文是在官方原文的基础上翻译并实操。

    本文使用的环境,STS,JDK1.8

    Building a RESTful Web Service

    本指南将指导您使用Spring创建一个“Hello, World” RESTful web服务的过程。

    What You Will Build

    您将构建一个在 http://localhost:8080/greeting 接受HTTP GET请求的服务。它将响应一个JSON表示的问候语,如下所示:

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

    您可以在查询字符串中使用可选的name参数定制问候语,如下所示:

    http://localhost:8080/greeting?name=User

    name参数值覆盖了World的默认值,并反映在响应中,如下所示:

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

    What You Need

    You can also import the code straight into your IDE:

    How to complete this guide

    1. 可以去GitHub下载源代码 https://github.com/spring-guides/gs-rest-service

    2. 可以自己手动创建从头开始,下面是创建的详细过程。

    New Spring Starter Project

    新建一个Spring Starter Project,勾选添加Spring Web依赖,然后Finish

    Starting with Spring Initialize

    对于所有的Spring应用程序,都应该从Spring初始化开始。Initializr提供了一种快速的方法来拉入应用程序所需的所有依赖项,并为您做了许多设置。这个示例只需要Spring Web依赖项。

    这里初始化的意思是说,开发一个Spring程序时,我们应先配置maven或Gradle来添加依赖。本文使用的是Maven。

    新建项目时自动产生的pom.xml中的依赖已经足够了,需要注意的一点是,新建项目后pom.xml中的Java version是11版本,本机装的是1.8版本,打包成jar的时候运行因版本不一致而出错,所以如果要打包成jar运行,需要修改pom.xml中的Java版本,与运行环境一致。

    Create a Resource Representation Class

    要对greeting表示进行建模,请创建一个资源表示类。为此,提供一个POJO,其中包含id和内容数据的字段、构造函数和访问器,如下所示:

    package com.example.restservice;
    
    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;
        }
    }

    Create a Resource Controller

    在Spring构建RESTful web服务的方法中,HTTP请求由controller处理。这些组件由@RestController标注标识,下面显示的GreetingControlle通过返回Greeting 类的新实例来处理/greetingGET 请求

    package com.example.restservice;
    
    import java.util.concurrent.atomic.AtomicLong;
    
    import org.springframework.web.bind.annotation.GetMapping;
    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();
    
        @GetMapping("/greeting")
        public Greeting greeting(@RequestParam(value = "name", defaultValue = "World") String name) {
            return new Greeting(counter.incrementAndGet(), String.format(template, name));
        }
    }

     下面是对程序中注释的详解。

    @GetMapping注释确保对/greeting的HTTP GET请求映射到greeting()方法。

    其他HTTP动作也有相应的注释(例如,POST的@PostMapping)。还有一个@RequestMapping注释,它们都是从它派生出来的,可以作为同义词(例如@RequestMapping(method=GET))。

    @RequestParam将查询字符串参数名称的值绑定到greeting()方法的name参数中。如果请求中没有name参数,则使用World的defaultValue。

    方法体的实现根据counter 的下一个值创建并返回一个新的Greeting对象,该对象具有id和内容属性,并使用Greeting template给定的名称。

    传统MVC控制器与前面所示的RESTful web服务控制器之间的主要区别是创建HTTP响应体的方式。这个RESTful web服务控制器填充并返回一个greeting对象,而不是依赖视图技术来执行将greeting数据呈现到HTML的服务器端呈现。对象数据将作为JSON直接写入HTTP响应。

    Greeting对象必须转换为JSON。由于Spring的HTTP消息转换器支持,您不需要手动进行这种转换。因为Jackson 2在类路径中,Spring的MappingJackson2HttpMessageConverter会被自动选择来将Greeting实例转换为JSON。

    Test the Service

    修改默认端口开始测试

    访问http://localhost:8085/greeting

     

    添加name

     

  • 相关阅读:
    面试题
    Struts2与Struts1的对比
    【转载】在Linux平台上安装和配置Ruby on Rails详解
    SVN总结
    Web.config文件例子详解
    Web.config文件简介
    在C#中应用哈希表(Hashtable)
    VS2005调试C++
    [Serializable]C#中的对象序列化
    ASP.NET下载文件(弹出打开保存文件对话框)
  • 原文地址:https://www.cnblogs.com/fangjb/p/14167214.html
Copyright © 2011-2022 走看看