当前位置:网站首页>Quarkus 实战二:开发REST ful 服务实现简单的curd功能
Quarkus 实战二:开发REST ful 服务实现简单的curd功能
2022-07-16 04:30:00 【[email protected]】
Quarkus 实战二:开发REST ful 服务实现简单的curd
概述
Quarkus集成了RESTEasy,这是一种用于定义REST API的JAX-RS实现
参考文档:
创建服务端点
JAX-RS是Quarkus 用来定义 RESTEasy默认的框架,你需要使用 Path GET,POST,PUT等动词注解来定义执行的方法
例如:
@Path("/hello")
public class ExampleResource {
/**
* GET 请求方式 Produces(MediaType.TEXT_PLAIN) 定义返回的媒体类型
*/
@GET
@Produces(MediaType.TEXT_PLAIN)
public String hello() {
return "Hello from RESTEasy Reactive";
}
}
以上实现的就是一个 GET 请求方法,用于请求查询数据的方法,
Produces 注解 用于定义返回的数据类型。
有效的HTTP动词注解: @GET、@POST、@PUT、@DELETE、@PATCH、@HEAD和@OPTIONS
获取请求参数
如何在方法中获取请求的参数,JAX-RS 规范中提供了一些内置的注解可以帮助我们获取参数:
@QueryParam 获取 url 请求参数 例如: name=12456 @QueryParam(“name”)
@HeaderParam 获取 Header 中的参数,常用来获取authorization 认证授权
@Context 定义一个对象,常用来获取 body中的数据,例如 post put方法使用
@FormParam 获取 form 表单提交参数
@CookieParam 获取cookie 参数
例子:
/**
* GET 请求方式 Produces(MediaType.TEXT_PLAIN) 定义返回的媒体类型
* Context 获取请求体信息
* QueryParam 获取请求参数
* HeaderParam 获取Header 参数
*/
@GET
@Produces(MediaType.TEXT_PLAIN)
public String hello(@Context User user,
@FormParam("title") String title,
@CookieParam("Cookie") String cookie,
@QueryParam("name") String name, @HeaderParam("auth") String auth) {
return "Hello from RESTEasy Reactive";
}
实现CRUD
1.加入pom依赖:
<dependencies>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-arc</artifactId>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-jdbc-mysql</artifactId>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-hibernate-orm</artifactId>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-hibernate-orm-panache</artifactId>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-smallrye-openapi</artifactId>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-mailer</artifactId>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-elasticsearch-rest-high-level-client</artifactId>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-hibernate-validator</artifactId>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-junit5</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-resteasy</artifactId>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-resteasy-jackson</artifactId>
</dependency>
<dependency>
<groupId>jakarta.persistence</groupId>
<artifactId>jakarta.persistence-api</artifactId>
</dependency>
<dependency>
<groupId>io.rest-assured</groupId>
<artifactId>rest-assured</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.22</version>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.9</version>
</dependency>
</dependencies>
orm 框架我们用 hibernate 数据库用 mysql
2.properties 配置
quarkus.package.type=uber-jar
quarkus.banner.enabled=false
quarkus.http.port=8080
quarkus.datasource.jdbc.validation-query-sql=select 1
quarkus.hibernate-orm.database.generation=update
# datasource configuration
quarkus.datasource.db-kind=mysql
%dev.quarkus.datasource.username=root
%dev.quarkus.datasource.password=root
%dev.quarkus.datasource.jdbc.url=jdbc:mysql://localhost:3306/user?zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=utf-8
3.实现代码
控制层:
/**
* 可以定义响应的请求类型: @GET、@POST、@PUT、@DELETE、@PATCH、@HEAD和@OPTIONS
*/
@Path("/hello")
public class ExampleResource {
private final UserService userService;
public ExampleResource(UserService userService) {
this.userService = userService;
}
/**
* GET 请求方式 Produces(MediaType.TEXT_PLAIN) 定义返回的媒体类型
* Context 获取请求体信息
* QueryParam 获取请求参数
* HeaderParam 获取Header 参数
*/
@GET
@Path("/getUser")
@Produces(MediaType.TEXT_PLAIN)
public String getUser(@QueryParam("id") String id) {
return new Gson().toJson(userService.getUser(id));
}
/**
* 创建 Consumes(MediaType.TEXT_PLAIN) 定义可接受的参数类型
*/
@POST
@Path("/createUser")
@Produces(MediaType.TEXT_PLAIN)
public String createUser(User user) {
userService.createUser(user);
return "创建成功";
}
@DELETE
@Path("/deleteUser")
@Produces(MediaType.TEXT_PLAIN)
public String deleteUser(@QueryParam("id") String id) {
userService.deleteUser(id);
return "删除成功";
}
@PUT
@Path("/updateUser")
@Produces(MediaType.TEXT_PLAIN)
public String updateUser(User user) {
userService.updateUser(user);
return "更新成功";
}
}
service层:
@Slf4j
@ApplicationScoped
public class UserService {
public User getUser(String id){
return User.findById(Integer.valueOf(id));
}
@Transactional
public void createUser(User user){
User.persist(user);
}
@Transactional
public void deleteUser(String id){
User.deleteById(Integer.valueOf(id));
}
@Transactional
public void updateUser(User user){
User.updateUser(user);
}
}
实体类层:
@Data
@Entity
@Accessors(chain = true)
@Table(name = "user")
public class User extends PanacheEntityBase implements Serializable {
private String name;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id", updatable = false)
private Integer id;
private Integer age;
private String email;
private String names;
private Long price;
public static void updateUser(User user){
update("age = :age where id = :id ", Parameters.with("age", user.getAge()).and("id",user.getId()));
}
}
如果这篇文章,有帮助到大家的,请给作者一个一键三连,谢谢
版权声明
本文为[[email protected]]所创,转载请带上原文链接,感谢
https://blog.csdn.net/qq_41971087/article/details/125810727
边栏推荐
- 2.18 haas506 2.0 development tutorial - communication between Alibaba cloud M2M devices - rule engine /topic message routing (only versions above 2.2 are supported)
- NPM install installation error: gyp info it worked if it ends with OK how to solve it
- Advanced principle of MySQL: MySQL execution process and order
- 贝加莱PLC-更改轴任务扫描时间和周期位置下发
- PageRank的原理和实现
- 山东省中小企业数字化转型论坛成功举办,九州云赋能中小企业数智升级
- 7.15模拟赛总结
- 文献学习(part99)--Fast unfolding of communities in large networks
- [FPGA tutorial case 25] Tan (x) calculation through NCO core and divider
- [phase locked loop] design and Simulation of all digital phase locked loop based on MATLAB
猜你喜欢

【Jmeter】Jmeter响应消息中文显示乱码
![[independent station operation] understand the four skills of cross-border e-commerce operation in one minute!](/img/d8/a367c26b51d9dbaf53bf4fe2a13917.png)
[independent station operation] understand the four skills of cross-border e-commerce operation in one minute!

The digital transformation forum for small and medium-sized enterprises in Shandong Province was successfully held, and Jiuzhou cloud empowers small and medium-sized enterprises to upgrade their digit

AB PLC learning notes

Matlab机械臂建模运动学仿真+轨迹规划

npm与node版本不匹配 更新了npm 结果报错node和npm不匹配 怎么退回之前的npm 版本?或者说怎么查看node适配的npm版本
![[target tracking] image inter frame difference target detection based on background subtraction and MATLAB simulation](/img/50/b5f0bec4ea71a7f7df2e48eff61fcc.png)
[target tracking] image inter frame difference target detection based on background subtraction and MATLAB simulation

Linux中安装mysql 5.7.23

AB controller l36erm_ Communication between two processors

ping 命令还能这么玩?
随机推荐
三条线(春季每日一题 59)
【FPGA教程案例25】通过NCO核和除法器实现tan(x)计算
leetcode445. 两数相加 II
阅读真题 | 真题阅读 做题记录 二
Literature learning (part99) -- fast unfolding of communities in large networks
Esp8266+blinker+web distribution network
英语 | 阅读的逻辑 解题笔记
贝加莱PLC-更改轴任务扫描时间和周期位置下发
Laozi cloud 3D products and services are introduced. A picture shows you how to choose!
ORA-01033
2018 Jiangsu Provincial Information and future programming expert competition test question -- (New) chicken and rabbit in the same cage
自动补全(春季每日一题 58)
dpdk flow filter总结(flow director/ rte_flow)
How does golang calculate constellations and zodiac signs based on birthdays
The digital transformation forum for small and medium-sized enterprises in Shandong Province was successfully held, and Jiuzhou cloud empowers small and medium-sized enterprises to upgrade their digit
腾讯员工发帖找对象,表示偏爱程序员!评论火了......丨黑马头条
leetcode 143. Rearrange linked list
Video processing: video sampling
【锁相环】基于MATLAB的全数字锁相环设计与仿真
Hcip first day study -- Review HCIA (static)