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

     

  • 相关阅读:
    es集群状态
    浅谈GO语言中的面向对象
    jstat命令详解
    jvm g1gc回收器
    解决ES集群状态异常教程(存在UNASSIGNED)
    html5分割上传实现超大文件无插件网页上传工具
    html5分割上传实现超大文件无插件网页上传
    科讯使用的:ckeditor编辑器.复制word图片.一直沾不上去.谁有好的解决办法呢
    编辑器直接word直接上传word里的图片
    请问有支持直接从 word 文档复制图片的 editor 吗
  • 原文地址:https://www.cnblogs.com/fangjb/p/14167214.html
Copyright © 2011-2022 走看看