网站首页 > java教程 正文
今天我们来写第一个 Java(Web) 项目,文章会包括如下内容:
- Spring MVC 常用注解
- Lombok 常用注解
- 创建 Spring Web 项目,并实现 echo 接口
- Spring MVC HTTP 请求的执行流程
Java Web 常用注解
- @RestController:是 @Controller 和 @ResponseBody 的组合注释
- @RequestMapping:类级别路由设置
@RequestMapping("api/product")
- @GetMapping:方法级别路由设置,对应 GET 请求
@GetMapping("listProduct")
- @PostMapping:方法级别路由设置,对应 POST 请求
@PostMapping("createProduct")
- @DeleteMapping:方法级别路由设置,对应 DELETE 请求
@DeleteMapping("delete/{id}")
- @PathVariable:路径变量,通常用于方法,但也可以于类
@GetMapping("/owners/{ownerId}/products/{productId}")
public Product getProduct(@PathVariable Long ownerId,
@PathVariable Long productId) {
// ...
}
- @RequestParam:路径参数,用于方法
@GetMapping("getProduct")
public String getProduct(@RequestParam("id") Long id) {
// ...
}
- @RequestBody :绑定到 HTTP Request Body,Body 的内容会通过 HttpMessageConverter 转换成你定义的参数
@PostMapping("addProduct")
public Result<String> addProduct(@RequestBody ProductDto param) {
// ...
}
- @ResponseBody 同样的,该标注表明把返回值通过 HttpMessageConverter 序列化到 HTTP Response 中。
Lombok 常用注解
- @Getter, @Setter:生成 getter, setter 方法
- @ToString:生成 toString 方法
- @EqualsAndHashCode:生成 hashCode 和 equals 方法
- @NoArgsConstructor, @AllArgsConstructor:生成构造函数
- @Data: 是 @Getter, @Setter, @ToString, @EqualsAndHashCode, @RequiredArgsConstructor 的简写
- @Accessors(chain=true):支持链式调用
Java Web 项目的两个分支
Java Web 有两个分支,一个是 Web Servlet,另一个是 Web Reactive.
- Web Servlet:Spring MVC, WebSocket, SockJS, STOMP Messaging
- Web Reactive:Spring WebFlux, WebClient, WebSocket, RSocket
接下来我们要创建的是 基于Servlet 的 Web 项目 Spring MVC。下面这个图清晰的表达了 Spring MVC 和 Spring WebFlux 的差异。
可以看到 Spring WebFlux 是不包含数据库(无 JDBC)访问的,而我们后面会用到数据库,所以这里我们选 Spring MVC 项目。
创建项目详细步骤
Spring Boot 3 最低要求 Java 17,而目前公司几乎所有项目用的都是 Java 8,所有这里我们选 Spring Boot 2 的最新版本 2.7.8。
经过以上步骤,一个空的 Java Web (Spring MVC) 项目已经创建起来了。如果你有安装 Spring Boot CLI,那么上述这么多步骤可以简化为一条命令:
spring init --dependencies=web,lombok --build=maven --java-version=1.8 --boot-version=2.7.8 springdemo
运行项目
通过 IDEA 右上方的工具栏运行如下,启动的服务默认端口是 8080
修改服务端口
可以通过修改项目配置文件来修改端口,IDEA 默认创建的配置文件是 application.properties,但最佳实践推荐使用 .yml 格式, 这里把 文件后缀名直接改成 .yml 即可。我们把端口改成 8990,修改完之后,再次运行,端口就变了。
创建 RESTFul API
- 封装项目的统一返回值类型
model/Result.java 文件
@Getter
@Setter
@Accessors(chain = true)
public class Result<T> {
private int code;
private String message;
private T data;
public Result() {
code = 0;
message = "success";
}
public Result<T> setCode(ResultCode error) {
code = error.code();
message = error.description();
return this;
}
}
- 定义返回值枚举
consts/ResultCode.java 文件
public enum ResultCode {
/** success */
ENoErr(0, "访问成功"),
/** failed */
EFailed(1, "系统异常"),
/** parameter error */
EInvalidParam(2, "非法参数")
;
private final int code;
private final String description;
ResultCode(int code, String desc) {
this.code = code;
this.description = desc;
}
public int code() {
return code;
}
public String description() {
return description;
}
}
- 创建 controller 定义request 请求处理的方法
controller/UtilController.java 文件
@RestController
@RequestMapping("api/util")
public class UtilController {
/** 接收什么,就返回什么 */
@PostMapping("echo")
public Result<JsonNode> echo(@RequestBody JsonNode param) {
Result<JsonNode> result = new Result<>();
return result.setData(param);
}
}
- 编译运行,调用接口
打开 Windows Terminal,使用 httpie 调用接口:
http -v http://192.168.1.10:8991/api/util/echo name=张三 birthday=2020-01-01
执行结果如下:
可以看到,通过接口传递的参数,被原样的返回给调用方。
Spring MVC 中 HTTP 请求的执行流程
今天篇幅有点长了,这部分另起一篇。
小结一下,今天咱们学习了 Spring MVC 和 Lombok 的常用注解;IDEA 中创建 Java 项目的基本步骤,也了解如何使用 Spring Boot CLI 命令来创建项目;并成功创建了第一个 Java Web 项目,实现了 第一个API:POST /api/util/echo。掌握如何运行,如何调用 API。
下一节,我们会继续分享 Spring MVC 中 HTTP 请求的执行过程,了解 HTTP Request 是怎么传递到 Controller 方法中的。
猜你喜欢
- 2024-11-09 SpringBoot入门之工程搭建(IDEA版)
- 2024-11-09 Spring Initializer+IntelliJ IDEA创建Spring Boot项目(图文)
- 2024-11-09 2020年IntelliJ IDEA最新最详细配置图文教程
- 2024-11-09 第六篇:使用IntelliJ IDEA编写你的第一个Java程序
- 2024-11-09 「Java开发中文指南」IntelliJ IDEA插件安装(一)
- 2024-11-09 SpringBoot项目的创建和配置的详细介绍
- 2024-11-09 IntelliJ IDEA搭建SpringBoot(intellij idea搭建聊天界面)
- 2024-11-09 IntelliJ IDEA 项目(idea java项目)
- 2024-11-09 idea搭建spring cloud项目-父子项目
- 2024-11-09 IDEA新建项目时的默认配置与模版配置
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)