跟着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

 

原文地址:https://www.cnblogs.com/fangjb/p/14167214.html