JAX-RS 是 Jakarta RESTful Web Services 的缩写,是 Jakarta EE API 规范,用于构建 RESTful 风格的 Web 服务。
本文通过一个简单的内存版的用户管理系统,介绍 JAX-RS 的基本用法。
使用 Quarkus REST 创建 JAX-RS 服务
为了便于演示,我们使用 Quarkus REST 来创建 JAX-RS 服务。
JAX-RS 常用注解
@Path
:指定资源类或方法的路径。@GET
:指定方法可以通过 GET 方法访问。@POST
:指定方法可以通过 POST 方法访问。@PUT
:指定方法可以通过 PUT 方法访问。@DELETE
:指定方法可以通过 DELETE 方法访问。@PATCH
:指定方法可以通过 PATCH 方法访问。@Consumes
:指定方法可以接受的 MIME 类型。@Produces
:指定方法可以生成的 MIME 类型。
用户实体类
1 2 3 4 5 6 7
| public class User { private Integer id; private String name; private Integer age;
}
|
DAO 类
1 2 3 4 5 6 7
| public interface UserDao { User addUser(User user); boolean updateUser(Integer id, User user); boolean deleteUser(Integer id); User getUser(Integer id); List<User> getUsers(); }
|
此处我们使用一个 List
来模拟数据库。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
| @Singleton public class UserDaoImpl implements UserDao { private final List<User> users = new CopyOnWriteArrayList<>();
@Override public User addUser(User user) { if (users.stream().anyMatch(u -> u.getId().equals(user.getId()))) { return null; } users.add(user); return user; }
@Override public boolean updateUser(Integer id, User user) { for (var i = 0; i < users.size(); i++) { if (users.get(i).getId().equals(id)) { users.set(i, user); return true; } } return false; }
@Override public boolean deleteUser(Integer id) { return users.removeIf(u -> u.getId().equals(id)); }
@Override public User getUser(Integer id) { return users.stream().filter(u -> u.getId().equals(id)).findFirst().orElse(null); }
@Override public List<User> getUsers() { return new ArrayList<>(users); } }
|
UserResource
类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
| @Path("/user") @Produces(MediaType.APPLICATION_JSON) @Consumes(MediaType.APPLICATION_JSON) public class UserResource { private final UserDao userDao;
public UserResource(UserDao userDao) { this.userDao = userDao; }
@GET public Response getUsers() { return Response.ok(userDao.getUsers()).build(); }
@GET @Path("/{id}") public Response getUser(@PathParam("id") Integer id) { User user = userDao.getUser(id); if (user == null) { return Response.status(Response.Status.NOT_FOUND).build(); } return Response.ok(user).build(); }
@POST public Response addUser(User user) { User u = userDao.addUser(user); if (u == null) { return Response.status(Response.Status.CONFLICT).build(); } return Response.ok(u).build(); }
@PUT @Path("/{id}") public Response updateUser(@PathParam("id") Integer id, User user) { if (!userDao.updateUser(id, user)) { return Response.status(Response.Status.NOT_FOUND).build(); } return Response.ok().build(); }
@DELETE @Path("/{id}") public Response deleteUser(@PathParam("id") Integer id) { if (!userDao.deleteUser(id)) { return Response.status(Response.Status.NOT_FOUND).build(); } return Response.ok().build(); } }
|
代码仓库:https://github.com/gtn1024/jaxrs-demo