利用Spring Boot构建restful web service的详细流程

本文档构建一个简单的restful webservice, 在官网原文Getting Started | Building a RESTful Web Service (spring.io)的基础上进行操作

文章目录

  • 一、项目创建流程
    • 1.1 创建项目
    • 1.2 创建资源表示类
    • 1.3 创建资源控制类
  • 二、项目运行
  • 参考资料

一、项目创建流程

本文的目标是构建一个服务,该服务将在http://localhost:8080/greeting接受HTTP GET请求

它将使用greeting的JSON表示进行响应,如下所示:

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

1.1 创建项目

在官网上Spring Initializr创建项目

请添加图片描述

1.2 创建资源表示类

greeting表示进行建模,创建一个资源表示类。

具体操作:为id和content提供一个Java record类,在/src/main/java/com/zouhu/restservice/Greeting.java添加如下代码

package com.zouhu.restservice;public record Greeting(long id, String content) {
}

此应用程序使用Jackson JSON库自动将greeting类型的实例列表到JSON中。

1.3 创建资源控制类

在Spring构建RESTful Web服务的方法中,HTTP请求由控制器处理。

这些组件由@RestController注释标识,下面代码中所示的GreetingController(来自src/main/java/com/example/restservice/GreetingController.java)通过返回一个greeting类的新实例来处理 /greeting的GET请求:

package com.zouhu.restservice;import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;import java.util.concurrent.atomic.AtomicLong;@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));}
}

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

二、项目运行

运行RestserviceApplication类,启动项目

访问http://localhost:8080/greeting, 结果如下:

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

访问http://localhost:8080/greeting?name=zouhu, 结果如下:

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

注意id属性是如何从1更改为2的。这证明您正在跨多个请求处理同一个GreetingController实例,并且它的计数器字段在每次调用时都按预期递增。

参考资料

Getting Started | Building a RESTful Web Service (spring.io)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/228674.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android flutter项目 启动优化实战(一)使用benchmark分析项目

背景描述 启动时间是用户对应用的第一印象,较慢的加载会对用户的留存和互动造成负面影响 在刚上线的B端项目中: 1.提高启动速度能提高整体流程的效率 2.提高首次运行速度能提高应用推广的初体验效果 问题描述 项目刚上线没多久、目前存在冷启动过程存在…

前端面试灵魂提问

1.自我介绍 2.在实习中,你负责那一模块 3.any与unknow的异同 相同点:any和unkonwn 可以接受任何值 不同点:any会丢掉类型限制,可以用any 类型的变量随意做任何事情。unknown 变量会强制执行类型检查,所以在使用一个…

【古月居《ros入门21讲》学习笔记】07_创建工作空间和功能包

目录 说明: 1. 工作空间(workspace) 结构: 2. 创建工作空间和功能包 创建工作空间 编译工作空间 创建功能包 设置环境变量 3. 注意 同一个工作空间下,不能存在同名的功能包; 不同工作空间下,可以存在同名的功…

【模电】晶闸管

晶闸管 结构和等效模型工作原理晶闸管的伏安特性晶闸管的主要参数额定正向平均电流 I F I\tiny F IF维持电流 I H I\tiny H IH触发电压 U G U\tiny G UG和触发电流 I G I\tiny G IG正向重复峰值电压 U D R M U\tiny DRM UDRM反向重复峰值电压 U R R M U\tiny RRM URRM 晶体闸流…

WIN10 x86环境部署ARM虚拟机(银河麒麟)

我们经常使用的是x86架构的cpu,而对于不同cpu架构的arm架构的操作系统,我们可以通过QEMU模拟器来进行模拟一个arm环境 1、部署前的准备 arm的镜像: 以此镜像为例:Kylin-Server-10-SP2-aarch64-Release-Build09-20210524.iso QE…

机器人制作开源方案 | 智能扶老助残辅助管家

作者:孙运通 黄善越 卢瑀 张宇峰 郑乐怡 单位:河海大学 指导老师:陆其清 人口老龄化始终是我国一个极为严峻的社会问题。独居老人和空巢老人占总人口比重日益提高:预计至2050年老龄人口占比将超20%,绝大部分城市和地…

网络和信息系统指令 ( NIS2 ) 及其全球影响

网络和信息系统指令 ( NIS2 ) 将于 2024 年 10 月生效,旨在提高欧盟 (EU) 的网络弹性。 不过,其影响可能会更广泛,带来更严格的流程和控制,并重新定义我们向被视为国家关键的组织提供服务的方式。 该强制性指令将具有效力&#x…

[操作系统] 面试宝典之~死锁连环系列

文章目录 2.22 什么是死锁2.24 解决死锁的方法死锁的预防死锁的避免死锁的检测死锁的解除 2.22 什么是死锁 在多道程序环境下,多个进程可以竞争有限数量的资源。当一个进程申请资源时,如果这时没有可用资源,那么这个进程进入等待状态。有时&…

面试题:汉诺塔问题 · 递归

你好,我是安然无虞。 文章目录 汉诺塔问题问题描述解题思路代码详解 汉诺塔问题 问题描述 解题思路 这道题的名字还是很响的,基本上都能看出来使用递归解题,但是具体怎么实现还是需要细细想一想。 我们一步一步来,请看&#xff…

HeteroTiC: 基于异构时间通道的鲁棒网络流水印

文章信息 论文题目:HeteroTiC: A robust network flow watermarking based on heterogeneous time channels 期刊(会议):Computer Networks 时间:2022 级别:CCF B 文章链接:https://doi.org/10…

OPENWRT路由配置IPV6公网访问

前提:已经拥有ipv6地址,不会配置ipv6的同学可以看我的上一篇文章。 一、光猫配置 1.1、修改光猫连接方式变为桥接: 其中需要注意的点为: 1.需要将原先的xxxx_VID_41的连接删掉,然后按照下面的配置进行 2.删掉之前…

MacBook如何远程控制华为手机?

将手机屏幕投影到电脑上可以提供更大的屏幕空间,方便观看电影、浏览照片、阅读文档等。然而,除了想将手机投屏到电脑,还想要在电脑上直接操作手机,有方法可以实现吗? 现在使用AirDroid Cast的远程控制手机功能就可以实…