原文: https://howtodoinjava.com/spring-boot/spring-boot-jersey-example/

学习使用 Spring BootJersey 框架来配置和创建 JAX-RS 2.0 REST API。 此示例应用程序使用 Jersey 的ServletContainer部署 REST API。

项目结构

在本教程中创建的应用程序的项目结构如下:

Spring Boot Jersey 示例 - 图1

Spring Boot Jersey 项目结构

从 Spring 初始化器创建 Spring Boot 应用程序

  1. 转到 Spring 初始化器页面并创建具有 Jersey(JAX-RS)依赖项的 spring boot 应用程序。
    Spring Boot Jersey 示例 - 图2
    Spring Boot 初始化器中选择 Jersey

  2. 将项目生成为 zip 文件。 将其解压缩到计算机中的某个位置。 将项目作为“现有 Maven 应用程序”导入到 eclipse 中。

  3. 检查 Maven 文件中是否应具有依赖项。

    1. <dependencies>
    2. <dependency>
    3. <groupId>org.springframework.boot</groupId>
    4. <artifactId>spring-boot-starter-jersey</artifactId>
    5. </dependency>
    6. <dependency>
    7. <groupId>org.springframework.boot</groupId>
    8. <artifactId>spring-boot-starter-test</artifactId>
    9. <scope>test</scope>
    10. </dependency>
    11. </dependencies>

创建 JAX-RS REST 资源

现在创建一些 JAX-RS 资源,我们将进入测试阶段。 我创建了UserResource类。

UserResource.java

  1. package com.howtodoinjava.jerseydemo;
  2. import java.net.URI;
  3. import java.net.URISyntaxException;
  4. import java.util.ArrayList;
  5. import java.util.HashMap;
  6. import java.util.Map;
  7. import javax.ws.rs.Consumes;
  8. import javax.ws.rs.DELETE;
  9. import javax.ws.rs.GET;
  10. import javax.ws.rs.POST;
  11. import javax.ws.rs.PUT;
  12. import javax.ws.rs.Path;
  13. import javax.ws.rs.PathParam;
  14. import javax.ws.rs.Produces;
  15. import javax.ws.rs.core.Response;
  16. import javax.xml.bind.annotation.XmlAccessType;
  17. import javax.xml.bind.annotation.XmlAccessorType;
  18. import javax.xml.bind.annotation.XmlRootElement;
  19. @XmlAccessorType(XmlAccessType.NONE)
  20. @XmlRootElement(name = "users")
  21. @Path("/users")
  22. public class UserResource
  23. {
  24. private static Map<Integer, User> DB = new HashMap<>();
  25. @GET
  26. @Produces("application/json")
  27. public Users getAllUsers() {
  28. Users users = new Users();
  29. users.setUsers(new ArrayList<>(DB.values()));
  30. return users;
  31. }
  32. @POST
  33. @Consumes("application/json")
  34. public Response createUser(User user) throws URISyntaxException
  35. {
  36. if(user.getFirstName() == null || user.getLastName() == null) {
  37. return Response.status(400).entity("Please provide all mandatory inputs").build();
  38. }
  39. user.setId(DB.values().size()+1);
  40. user.setUri("/user-management/"+user.getId());
  41. DB.put(user.getId(), user);
  42. return Response.status(201).contentLocation(new URI(user.getUri())).build();
  43. }
  44. @GET
  45. @Path("/{id}")
  46. @Produces("application/json")
  47. public Response getUserById(@PathParam("id") int id) throws URISyntaxException
  48. {
  49. User user = DB.get(id);
  50. if(user == null) {
  51. return Response.status(404).build();
  52. }
  53. return Response
  54. .status(200)
  55. .entity(user)
  56. .contentLocation(new URI("/user-management/"+id)).build();
  57. }
  58. @PUT
  59. @Path("/{id}")
  60. @Consumes("application/json")
  61. @Produces("application/json")
  62. public Response updateUser(@PathParam("id") int id, User user) throws URISyntaxException
  63. {
  64. User temp = DB.get(id);
  65. if(user == null) {
  66. return Response.status(404).build();
  67. }
  68. temp.setFirstName(user.getFirstName());
  69. temp.setLastName(user.getLastName());
  70. DB.put(temp.getId(), temp);
  71. return Response.status(200).entity(temp).build();
  72. }
  73. @DELETE
  74. @Path("/{id}")
  75. public Response deleteUser(@PathParam("id") int id) throws URISyntaxException {
  76. User user = DB.get(id);
  77. if(user != null) {
  78. DB.remove(user.getId());
  79. return Response.status(200).build();
  80. }
  81. return Response.status(404).build();
  82. }
  83. static
  84. {
  85. User user1 = new User();
  86. user1.setId(1);
  87. user1.setFirstName("John");
  88. user1.setLastName("Wick");
  89. user1.setUri("/user-management/1");
  90. User user2 = new User();
  91. user2.setId(2);
  92. user2.setFirstName("Harry");
  93. user2.setLastName("Potter");
  94. user2.setUri("/user-management/2");
  95. DB.put(user1.getId(), user1);
  96. DB.put(user2.getId(), user2);
  97. }
  98. }

Users.java

  1. package com.howtodoinjava.jerseydemo;
  2. import java.util.ArrayList;
  3. import javax.xml.bind.annotation.XmlAccessType;
  4. import javax.xml.bind.annotation.XmlAccessorType;
  5. import javax.xml.bind.annotation.XmlElement;
  6. import javax.xml.bind.annotation.XmlRootElement;
  7. @XmlAccessorType(XmlAccessType.NONE)
  8. @XmlRootElement(name = "users")
  9. public class Users {
  10. @XmlElement(name="user")
  11. private ArrayList<User> users;
  12. public ArrayList<User> getUsers() {
  13. return users;
  14. }
  15. public void setUsers(ArrayList<User> users) {
  16. this.users = users;
  17. }
  18. }

User.java

  1. package com.howtodoinjava.jerseydemo;
  2. import java.io.Serializable;
  3. import javax.xml.bind.annotation.XmlAccessType;
  4. import javax.xml.bind.annotation.XmlAccessorType;
  5. import javax.xml.bind.annotation.XmlAttribute;
  6. import javax.xml.bind.annotation.XmlElement;
  7. import javax.xml.bind.annotation.XmlRootElement;
  8. @XmlAccessorType(XmlAccessType.NONE)
  9. @XmlRootElement(name = "user")
  10. public class User implements Serializable {
  11. private static final long serialVersionUID = 1L;
  12. @XmlAttribute(name = "id")
  13. private int id;
  14. @XmlAttribute(name="uri")
  15. private String uri;
  16. @XmlElement(name = "firstName")
  17. private String firstName;
  18. @XmlElement(name = "lastName")
  19. private String lastName;
  20. public int getId() {
  21. return id;
  22. }
  23. public void setId(int id) {
  24. this.id = id;
  25. }
  26. public String getFirstName() {
  27. return firstName;
  28. }
  29. public void setFirstName(String firstName) {
  30. this.firstName = firstName;
  31. }
  32. public String getLastName() {
  33. return lastName;
  34. }
  35. public void setLastName(String lastName) {
  36. this.lastName = lastName;
  37. }
  38. public String getUri() {
  39. return uri;
  40. }
  41. public void setUri(String uri) {
  42. this.uri = uri;
  43. }
  44. }

Jersey 配置

  1. 现在我们有了一个 JAX-RS 资源,我们想从包含 Jersey 依赖项的 spring boot 应用程序中访问它。 让我们将此资源注册为 Jersey 资源。 ```java package com.howtodoinjava.jerseydemo;

import org.glassfish.jersey.server.ResourceConfig; import org.springframework.stereotype.Component;

@Component public class JerseyConfig extends ResourceConfig { public JerseyConfig() { register(UserResource.class); } }

  1. <br />查看`@Component`注解。 它可以在 Spring Boot 自动扫描源文件夹中的 java 类时注册此类。
  2. 2.
  3. `ResourceConfig`提供高级功能以简化 JAX-RS 组件的注册。
  4. 3.
  5. 用`SpringBootServletInitializer`扩展 spring boot 应用程序。
  6. ```java
  7. package com.howtodoinjava.jerseydemo;
  8. import org.springframework.boot.autoconfigure.SpringBootApplication;
  9. import org.springframework.boot.builder.SpringApplicationBuilder;
  10. import org.springframework.boot.web.support.SpringBootServletInitializer;
  11. @SpringBootApplication
  12. public class JerseydemoApplication extends SpringBootServletInitializer
  13. {
  14. public static void main(String[] args)
  15. {
  16. new JerseydemoApplication().configure(new SpringApplicationBuilder(JerseydemoApplication.class)).run(args);
  17. }
  18. }

示例

将项目作为 Spring 启动应用程序运行。 现在测试其余资源。

访问/users资源

Spring Boot Jersey 示例 - 图3

用户资源

访问/users/1资源

Spring Boot Jersey 示例 - 图4

user resource

下载源代码

要下载此示例的源代码,请单击下面提供的下载链接。

下载源码

将我的问题放在评论部分。

学习愉快!