Spring Boot 创建RESTful Web Service

2023-11-04

1. 介绍

本篇将使用Spring Boot创建一个简单restful风格web服务,接受HTTP GET请求:

http://localhost:8080/greeting

响应体(respond)为一个JSON字符串

{"id":1,"content":"Hello, World!"}
2. 环境要求

IED 或 文本编辑器

JDK1.8+

Maven 3.0+


3. 项目工程

1) pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.springframework</groupId>
    <artifactId>gs-rest-service</artifactId>
    <version>0.1.0</version>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.4.2.RELEASE</version>
    </parent>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.jayway.jsonpath</groupId>
            <artifactId>json-path</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <properties>
        <java.version>1.8</java.version>
    </properties>


    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

    <repositories>
        <repository>
            <id>spring-releases</id>
            <url>https://repo.spring.io/libs-release</url>
        </repository>
    </repositories>
    <pluginRepositories>
        <pluginRepository>
            <id>spring-releases</id>
            <url>https://repo.spring.io/libs-release</url>
        </pluginRepository>
    </pluginRepositories>
</project>

Spring Boot Maven Plugin 的作用为:

将本项目classpath里面的所有jar包打包成一个可执行的jar文件;

    找到包含public static void main() 方法的类,作为可执行jar的入口

提供內建的依赖分析器,为Spring boot dependencies设置默认的版本号(可以被自己指定的版本号覆盖)


2) 创建资源表示类(resource representation,即RESTful中的R,简单理解就是实体)

package hello;

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;
    }
}

注:spring使用Jackson JSON库将实体类的对象自动转换成JSON。


3) 资源控制类

package hello;

import java.util.concurrent.atomic.AtomicLong;
import org.springframework.web.bind.annotation.RequestMapping;
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();

    @RequestMapping("/greeting")
    public Greeting greeting(@RequestParam(value="name", defaultValue="World") String name) {
        return new Greeting(counter.incrementAndGet(),
                            String.format(template, name));
    }
}

控制器代码很简洁,但是却做了很多事情。

@RestController将该类标注为一个spring bean,并标记其中的每个方法返回一个实体对象。相当于@Controller+@ResponsBody。


@RequestMapping提供url和方法的映射,当接收到一个/greeting的请求时,能执行greeting()方法。

注:上面的例子没有指定http动作(GET, PUT, POST, DELETE),所以会与所有的动作匹配。更好的方法是使@RequestMapping(method=GET)这样只会接收到GET请求。


@RequestParam通过指定的value绑定url中的参数。本例中,url参数是可选的,因为提供了默认值“World”。


方法体创建Greeting()对象并返回。


注:传统的MVC 控制器和RESTful 控制器的区别在于http响应是怎样被创建的。

传统的MVC 控制器会通过视图转换将Greeting对象渲染成html返回到前端。

而RESTful 控制器直接返回Greeting对象,通过JSON转换器变成一个JSON字符串。


4) 执行类

package hello;

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

@SpringBootApplication
public class Application {

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

@SpringBootApplication = @Configuration+@EnableAutoConfiguration+@ComponentScan

@Configuration将该类标注为一个spring bean

@EnableAutoConfiguration告诉Spring Boot装载bean的方式可以基于classpath设置、其他bean或属性设置。

正常情况下我们会为Spring MCV应用加上@EnableWebMvc,但是这里Spring Boot已经为我们做好了,它检测到了工程classpath下有spring-mvc jar,就会自动加上这个注解来激活web应用的关键动作,如创建DispatcherServlet。

@ComponentScan 扫描当前包里面所有带@Component、@Service、@Controller等注解的类,加入spring容器注册成bean。


main方法里用Spring Boot的SpringApplication.run()方法启动web应用。整个项目没有一个xml配置文件,包括web.xml,这就是Spring Boot的强大所在,让用户只关注业务逻辑的java代码,不用去处理项目配置和结构


5) 构建可执行JAR

命令行进入项目根目录

输入./mvnw spring-boot:run

./mvnw clean package

会发现项目目录下生成一个target文件夹,里面的jar文件即为可执行JAR。

运行JAR  java -jar target/gs-rest-service-0.1.0.jar


6) 测试

浏览器输入 http://localhost:8080/greeting

返回结果

{"id":1,"content":"Hello, World!"}
带参数的请求   http://localhost:8080/greeting?name=User

返回结果

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

原文:  http://spring.io/guides/gs/rest-service/,翻译省去了关于Gradle的部分。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring Boot 创建RESTful Web Service 的相关文章

随机推荐

  • 【计算机视觉】PixelRNN 讲解

    任何的书写错误 排版错误 概念错误等 希望大家包含指正 PixelRNN 论文信息 作者 Aaron van den Oord Google DeepMind 期刊 PMLR JMLR 发布时间与更新时间 2016 01 25 2016 0
  • SQL列属性

    列属性 真正的约束字段的是数据类型 但是数据类型的约束很单一 需要有一些额外的约束 来保证数据的合法性 列属性有很多 NULL NOT NULL default primary key unique key auto increment c
  • Leetcode-4. Median of Two Sorted Arrays

    Topic background Given two sorted arrays nums1 and nums2 of size m and n respectively return the median of the two sorte
  • vue使用element plus引入ElMessage样式失效的问题

    样式失效如图 我使用的是按需引用 所以在main js中直接导入下面样式就行 import element plus theme chalk index css
  • 装饰模式与代理区别

    学着学着真容易懵 相同点 装饰者类与目标类要求实现同一接口 静态代理类与目标类要求也实现同一接口 装饰者类与静态代理类都可以实现增强目标类的功能 装饰者类与静态代理类中都具有目标类的引用 目的都是为了在其中调用目标类的方 法 不同点 装饰者
  • JSP 点击量统计

    2019独角兽企业重金招聘Python工程师标准 gt gt gt JSP 点击量统计 有时候我们需要知道某个页面被访问的次数 这时我们就需要在页面上添加页面统计器 页面访问的统计一般在用户第一次载入时累加该页面的访问数上 要实现一个计数器
  • 第5章 使用图像(html)

    第5章 使用图像 html 目录标题 5 1 有序列表 5 1 1 ol标签 5 1 2 有序列表的序号类型type 5 1 3 有序列表的起始数值start 5 2 无序列表 5 3 定义列表dl 5 4 列表的嵌套 5 5 练习题 5
  • windows 8 pro vl_微软MSDN原版Windows10/8/7/XP系统镜像与office下载地址大全

    相信如今大多数的用户开始讨厌GHOST形式安装操作系统 而使用微软MSDN原版系统进行安装 原因是网上分享的GHOST系统已经形成了一个黑色产业链 由于系统被删减过 众多功能缺失 并捆绑了众多无用的软件程序 还强制修改浏览器主页等让人讨厌的
  • 深度学习边缘检测 HED 训练自己的数据

    深度学习边缘检测 HED 训练自己的数据 数据集制作 使用labelme标注 选择lineStrip 线条束 标注 生成json文件 之后使用批量处理脚本将json文件转为边缘数据集 具体过程如下 首先将所有的json文件放入一个文件夹内
  • 云计算与海量数据处理技术

    云计算提供了一种对资源 按需索取服务 的能力 确保了使用时间与需要时间的完全一致 从而建立了一种分布式 高效率 低成本的IT商业模式 正是这些特点 使云计算成为IT发展的潮流与趋势 为解决广大系统设计人员深入研究与开发云计算系统的需要 培训
  • 小美的数组操作2---牛客周赛 Round 11

    注意给a 0 赋一个最小值 include
  • 1004 成绩排名 (20 分)

    1004 成绩排名 20 分 读入 n gt 0 名学生的姓名 学号 成绩 分别输出成绩最高和成绩最低学生的姓名和学号 输入格式 每个测试输入包含 1 个测试用例 格式为 第 1 行 正整数 n 第 2 行 第 1 个学生的姓名 学号 成绩
  • WEB应用防火墙安全技术要求与测试评价方法

    信息安全技术 WEB应用防火墙安全技术要求与测试评价方法 范围 本标准规定了WEB应用防火墙的安全功能要求 自身安全保护要求 性能要求和安全保证要求 并提供了相应的测试评价方法 本标准适用于WEB应用防火墙的设计 生产 检测及采购 规范性引
  • Android自定义View-Path的详细介绍

    一 构造方法 1 Path path new Path 空的构造方法 2 Path path new Path Path src 创建一个新的路径 并从src路径获取内容赋值给新的路径 二 Path常用的一些方法 分类 Path方法 备注
  • Verilog学习之位拆分与运算设计

    文章目录 前言 一 题目描述 二 实现思路 1 题意分析 2 状态分析 三 代码展示 总结 前言 今天我们做的是第五道题 位拆分与运算 这道题比较简单 我们只需要用到状态机的思想和 运算以及数据锁存的问题 接下来就让我们看看如何写这道题 位
  • Kibana server is not ready yet

    Kibana server is not ready yet 这个错误通常是由于Kibana服务无法连接到Elasticsearch引起的 这可能是由于以下原因之一 1 Elasticsearch没有启动 请确保Elasticsearch正
  • vivado时序分析之set_input_delay(三)

    本篇用vivado timing constraints wizard来进行set input delay的约束 set input delay界面如图一所示 包括interface clock synchronous alignment
  • Python第三方库在命令行使用pip安装完成之后只能使用idle,而不能pycharm的解决方法

    先使用pip install requests 或者其他模块也可以 然后如图 就可以看到这些模块被安装的位置 看到安装的一些模块都在这里 直接把site packages整个文件夹Ctrl C一下 然后找到Pycharm的项目文件夹 就是你
  • uniapp各个页面监听

    当前页面在退出时 uni emit zxpg zxpg res tips uni navigateBack 返回上一个页面 在上一个页面的onShow uni on zxpg data gt console log 接收事件test成功 d
  • Spring Boot 创建RESTful Web Service

    1 介绍 本篇将使用Spring Boot创建一个简单restful风格web服务 接受HTTP GET请求 http localhost 8080 greeting 响应体 respond 为一个JSON字符串 id 1 content