本文大家继续一起来学习RESTful Web。大家在上一讲已经了解了如何设置项目和构建系统,现在大家可以创建基于RESTful的Web服务了。
关于RESTful的介绍大家可以点击:
实现Python、Java 在线编译(无需任何环境)以及学习教程~
该服务将在后端处理路由为” /greet“的 GET 请求,并且可以在访问请求中携带参数。GET 请求成功后应返回 200 OK 响应,并在前端输出以下内容:
{
"id": 1,2,3..,
"content": "Hello, World!"
}
效果如下图所示:
一、请求建模
如上图,id 字段是请求的编号,每次递增,内容是请求内容的文本。大家要对请求进行建模,需要创建一个类Greet对请求进行包装。类Greet其中包含 id 和内容数据的字段、构造函数和访问器,如以下代码所示:
package com.example.demo;
public class Greet {
private final long id;
private final String content;
//构造函数
public Greet(long id, String content) {
this.id = id;
this.content = content;
}
public long getId() {
return id;
}
public String getContent() {
return content;
}
}
二、创建资源控制器
在 Springboot构建 RESTful Web 服务的方法中,HTTP 请求由控制器处理。这些组件由@RestController注释标识,资源控制器类GreetControl通过返回类Greet的新实例来处理 /greeting 的 GET 请求:
package com.example.demo;
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 GreetControl {
private static final String template = "Hello, %s!";
private final AtomicLong counter = new AtomicLong();
@GetMapping("/greet")
public Greet greet(@RequestParam(value = "name", defaultValue = "World") String name) {
return new Greet(counter.incrementAndGet(), String.format(template, name));
}
}
这个控制器看似简洁明了,但其实背后强大的Sprintboot帮大家做了很多事情。
@GetMapping 注释确保对 /greet 的 HTTP GET 请求映射到 greet()方法。
@RequestParam将查询字符串参数名称的值绑定到greet()方法的名称参数中。如果请求中没有 name 参数,则使用"World"作为默认值。
方法实现创建并返回一个Greet类的对象,该对象具有基于计数器的下一个值的 id 和 content 属性,并使用模板进行格式化。
传统MVC控制器和RESTful Web服务控制器之间的主要区别在于创建HTTP响应主体的方式。RESTful Web 服务控制器并不依赖于视图技术将内容在服务器端呈现为 HTML,而是填充并返回一个 Greet对象。对象数据将作为JSON 直接写入 HTTP 响应。
此代码使用 Spring @RestController装饰,它将被装饰的类标记为控制器,
Greet对象必须转换为 JSON。由于Spring的HTTP消息转换器会自动选择 Spring 的 MappingJackson2HttpMessageConverter 将 Greeting 实例转换为 JSON,大家无需手动进行此转换。
如果请求中没有 name 参数,则会使用"World"作为默认值。
如果使用?name=bingyan进行参数传递,则前端”Hello,“后面显示输出变为:
发表评论 取消回复