java jersey get_Spring Boot Jersey使用示例

前言

本文将学习如何使用Spring Boot和Jersey框架,去配置和创建JAX-RS 2.0 REST API接口;

这个示例应用使用的是Jersey的Servlet容器去部署REST API接口;

工程目录

本文例子中的工程代码结果如下:

ee8f1582d86d39665ccd7662cd3e872a.png

利用Spring Initializr工具创建Spring Boot应用Demo

1.访问Spring Initializr网站,添加Jersey (JAX-RS)依赖,点击生成代码;

2e7b49cbc81ca2564e9b1ef011791d4e.png

2.下载代码到本地,解压,导入代码到IDE中

3.检查下pom.xml代码里是否包含了spring-boot-starter-jersey依赖;

org.springframework.boot

spring-boot-starter-jersey

org.springframework.boot

spring-boot-starter-test

test

创建JAX-RS REST资源

现在,我们就可以开始创建JAX-RS REST资源了,创建完成后,可以进行测试;

先创建一个UserResource类,代码如下:

UserResource.java

package com.howtodoinjava.jerseydemo;

import java.net.URI;

import java.net.URISyntaxException;

import java.util.ArrayList;

import java.util.HashMap;

import java.util.Map;

import javax.ws.rs.Consumes;

import javax.ws.rs.DELETE;

import javax.ws.rs.GET;

import javax.ws.rs.POST;

import javax.ws.rs.PUT;

import javax.ws.rs.Path;

import javax.ws.rs.PathParam;

import javax.ws.rs.Produces;

import javax.ws.rs.core.Response;

import javax.xml.bind.annotation.XmlAccessType;

import javax.xml.bind.annotation.XmlAccessorType;

import javax.xml.bind.annotation.XmlRootElement;

@XmlAccessorType(XmlAccessType.NONE)

@XmlRootElement(name = "users")

@Path("/users")

public class UserResource

{

private static Map DB = new HashMap<>();

@GET

@Produces("application/json")

public Users getAllUsers() {

Users users = new Users();

users.setUsers(new ArrayList<>(DB.values()));

return users;

}

@POST

@Consumes("application/json")

public Response createUser(User user) throws URISyntaxException

{

if(user.getFirstName() == null || user.getLastName() == null) {

return Response.status(400).entity("Please provide all mandatory inputs").build();

}

user.setId(DB.values().size()+1);

user.setUri("/user-management/"+user.getId());

DB.put(user.getId(), user);

return Response.status(201).contentLocation(new URI(user.getUri())).build();

}

@GET

@Path("/{id}")

@Produces("application/json")

public Response getUserById(@PathParam("id") int id) throws URISyntaxException

{

User user = DB.get(id);

if(user == null) {

return Response.status(404).build();

}

return Response

.status(200)

.entity(user)

.contentLocation(new URI("/user-management/"+id)).build();

}

@PUT

@Path("/{id}")

@Consumes("application/json")

@Produces("application/json")

public Response updateUser(@PathParam("id") int id, User user) throws URISyntaxException

{

User temp = DB.get(id);

if(user == null) {

return Response.status(404).build();

}

temp.setFirstName(user.getFirstName());

temp.setLastName(user.getLastName());

DB.put(temp.getId(), temp);

return Response.status(200).entity(temp).build();

}

@DELETE

@Path("/{id}")

public Response deleteUser(@PathParam("id") int id) throws URISyntaxException {

User user = DB.get(id);

if(user != null) {

DB.remove(user.getId());

return Response.status(200).build();

}

return Response.status(404).build();

}

static

{

User user1 = new User();

user1.setId(1);

user1.setFirstName("John");

user1.setLastName("Wick");

user1.setUri("/user-management/1");

User user2 = new User();

user2.setId(2);

user2.setFirstName("Harry");

user2.setLastName("Potter");

user2.setUri("/user-management/2");

DB.put(user1.getId(), user1);

DB.put(user2.getId(), user2);

}

}

Users.java

package com.howtodoinjava.jerseydemo;

import java.util.ArrayList;

import javax.xml.bind.annotation.XmlAccessType;

import javax.xml.bind.annotation.XmlAccessorType;

import javax.xml.bind.annotation.XmlElement;

import javax.xml.bind.annotation.XmlRootElement;

@XmlAccessorType(XmlAccessType.NONE)

@XmlRootElement(name = "users")

public class Users {

@XmlElement(name="user")

private ArrayList users;

public ArrayList getUsers() {

return users;

}

public void setUsers(ArrayList users) {

this.users = users;

}

}

User.java

package com.howtodoinjava.jerseydemo;

import java.io.Serializable;

import javax.xml.bind.annotation.XmlAccessType;

import javax.xml.bind.annotation.XmlAccessorType;

import javax.xml.bind.annotation.XmlAttribute;

import javax.xml.bind.annotation.XmlElement;

import javax.xml.bind.annotation.XmlRootElement;

@XmlAccessorType(XmlAccessType.NONE)

@XmlRootElement(name = "user")

public class User implements Serializable {

private static final long serialVersionUID = 1L;

@XmlAttribute(name = "id")

private int id;

@XmlAttribute(name="uri")

private String uri;

@XmlElement(name = "firstName")

private String firstName;

@XmlElement(name = "lastName")

private String lastName;

public int getId() {

return id;

}

public void setId(int id) {

this.id = id;

}

public String getFirstName() {

return firstName;

}

public void setFirstName(String firstName) {

this.firstName = firstName;

}

public String getLastName() {

return lastName;

}

public void setLastName(String lastName) {

this.lastName = lastName;

}

public String getUri() {

return uri;

}

public void setUri(String uri) {

this.uri = uri;

}

}

配置Jersey

到目前为止,我们已经创建了一个JAX-RS资源,现在我们想通过spring boot应用去访问它,步骤如下;

1.首先我们要注册改资源为Jersey资源,代码如下:

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);

}

}

注意需要加上 @Component注解,以便Spring Boot能够扫描到;

2.其次JerseyConfig需要继承ResourceConfig,该类提供了很多高级功能,简化了JAX-RS组件的注册工作;

3.最后Spring Boot Application启动类需要继承SpringBootServletInitializer

package com.howtodoinjava.jerseydemo;

import org.springframework.boot.autoconfigure.SpringBootApplication;

import org.springframework.boot.builder.SpringApplicationBuilder;

import org.springframework.boot.web.support.SpringBootServletInitializer;

@SpringBootApplication

public class JerseydemoApplication extends SpringBootServletInitializer

{

public static void main(String[] args)

{

new JerseydemoApplication().configure(new SpringApplicationBuilder(JerseydemoApplication.class)).run(args);

}

}

演示

启动Spring Boot应用,访问user 资源

9341aa8dc51de0e4ea016d63a18c9ac6.png

访问/users/1资源

3e512c1efd94317897acf106bc0fe93c.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值