LOADING

加载过慢请开启缓存 浏览器默认开启

基于SpringBoot的Helloworld与四则运算服务

基于SpringBoot的Helloworld与四则运算服务


基本要求

  • 理解掌握SpringBoot结合Maven的工程搭建流程
  • 理解掌握SpringBoot如何应用于Web领域
  • 理解具备基于SpringBoot设计编写简单接口的能力

实验过程

导入SpringBoot工程

将下面Springboot项目解压并导入IDE,实现项目初始化:

使用IntelliJ IDEA导入SpringBoot工程
  • 在欢迎屏幕中点击“Open”,或选择“File | Open”,在弹出的“Open File or Project”窗口中找到 Spring Boot 工程目录:

  • IntelliJ IDEA 会自动解析 Maven 项目、下载相关依赖,解析完成后,使用快捷键 Shift+F10 即可运行空白项目:

当出现与如图类似的输出,则表示项目导入成功。

使用 Visual Studio Code 导入 Spring Boot 工程
  • 要在 Visual Studio Code 中编译、调试 Spring Boot 工程,需要安装 Java 插件扩展包“Extension Pack for Java”,该插件扩展包包含对 Java 语言、Java 调试、Maven 等的支持。要安装该插件扩展包,需先转到 “Extensions”窗口(使用快捷键 Ctrl+Shift+X),键入“java”过滤插件列表,找到对应的插件包并选择安装:

  • 使用快捷键 Ctrl+K Ctrl+O 打开对应的项目文件夹,Visual Studio Code 将自动导入、解析项目。解析完成后,进入 src/main/java/tech/synx/arithmetic/ArithmeticApplication.java 文件中,此时 main() 函数上方将出现“Run | Debug”按钮,点击“Run”按钮即可运行空白项目:

当出现与如图类似的输出,则表示项目导入成功。

接口定义与实现

在 Spring 模型中,Controller 层用于拦截传入请求,将请求的数据转换成项目内部的数据结构,并将数据发送给 Model 层进行进一步处理。在 Model 层处理完成后,Controller 层将结果回送。这些操作在 Spring Boot 中实现了自动配置,简化了开发流程,接口的实现仅需使用基于注解的 Controller 类即可,Spring Boot 默认使用 Jackson 包实现 JSON 与 Java 对象之间的自动转换。

Spring Boot 常使用按层的组织,即将所有 Controller 类放在 controller 包下、所有 Service 类放在 service 包下,所有实体类放在 domain / model 包下等。本实验的计算操作较为简单,因此无需进行 Service 类的设计。

接口规范

求和接口

求和接口,返回两整数之和

URI: POST /v1/arithmetic/operation/add
请求头:Content-type:application/json
请求参数:
op1: 第一个操作数;int;必填
op2: 第二个操作数;int;必填
请求示例:
{
    "op1": 3,
    "op2": 4
}
响应参数:
status: 状态;1表示成功,0表示调用失败
data: 结果;object
result: 计算结果;int
响应示例:
{
    "status": 1,
    "data": {
        "result": 7
    }
}
求差接口

返回两数之差

URI: POST /v1/arithmetic/operation/subtract
请求头:Content-type:application/json
请求参数:
op1: 第一个操作数;int;必填
op2: 第二个操作数;int;必填
请求示例:
{
    "op1": 3,
    "op2": 6
}
响应参数:
status: 状态;1表示成功,0表示调用失败
data: 结果;object
result: 计算结果;int
响应示例:
{
    "status": 1,
    "data": {
        "result": -3
    }
}
求积接口

返回两数之积

URI: POST /v1/arithmetic/operation/multiply
请求头:Content-type:application/json
请求参数:
op1: 第一个操作数;int;必填
op2: 第二个操作数;int;必填
请求示例:
{
    "op1": 3,
    "op2": 4
}
响应参数:
status: 状态;1表示成功,0表示调用失败
data: 结果;object
result: 计算结果;int
响应示例:
{
    "status": 1,
    "data": {
        "result": 12
    }
}
求商接口

返回两数的商和余数。当除数为0,返回 JSON 中 status 字段设置为0

URI: POST /v1/arithmetic/operation/divide
请求头:Content-type:application/json
请求参数:
op1: 第一个操作数;int;必填
op2: 第二个操作数;int;必填
请求示例:
{
    "op1": 3,
    "op2": 4
}
响应参数:
status: 状态;1表示成功,0表示调用失败
data: 结果;object
remainder: 余数;int
quotient: 商;int
响应示例:
{
    "status": 1,
    "data": {
        "remainder": 3,
        "quotient": 0
    }
}

服务器程序测评要求

日志输出要求

日志输出采用 Spring Boot 默认的输出模式:

  • 日期与时间
  • 日志等级,包括 ERRORWARNINFODEBUGTRACE
  • 进程 ID
  • --- 字符串分隔符
  • 方括号包围的线程名
  • 日志器名,默认是类名
  • 实际日志信息

所有用户日志均以 INFO 等级输出

服务器接收客户端请求

服务器程序中对应处理函数在收到客户端的 HTTP 请求后必须在日志文件中输出客户端请求的数据。

格式为:[srv] [req] (<HTTP_method> <endpoint>) <json_string>

例如:[srv] [req] (POST /divide) {"op1":34,"op2":12}

服务器回送响应

处理函数在处理用户请求后向客户端回送响应,在回送消息前在日志文件中输出向客户端发送的数据。

格式为:[srv] [resp] (<HTTP_method> <endpoint>) <json_string>

例如:[srv] [req] (POST /divide) {"status":1,"data":{"quotient":2,"remainder":10}}

输入输出

服务器端输入
服务器端输出

参考资料