使用Jersey2开发RESTful(1)——入门

Jersey的下载地址https://jersey.java.net/。这里下载最新的版本jaxrs-ri-2.6.zip。

 

  • 创建工程

新建一个web工程,引入Jersey所需的jar包。

 

  • 修改web.xml
<servlet>
		<servlet-name>jersey_rest</servlet-name>
		<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
		<init-param>
			<param-name>javax.ws.rs.Application</param-name>
			<param-value>com.test.ServerApp</param-value>
		</init-param>
		<load-on-startup>1</load-on-startup>
	</servlet>
	<servlet-mapping>
		<servlet-name>jersey_rest</servlet-name>
		<url-pattern>/rest/*</url-pattern>
	</servlet-mapping>

由Jersey的Servlet拦截请求,还需要指定一个Application。

 

  • 编写Application类
@ApplicationPath("/rest")
public class ServerApp extends ResourceConfig{
	public ServerApp() {
		packages("com.test.resource");
	}
}

在这个类里面指定加载resource的包。

 

  • 编写Resource类

Resource对应的RESTful对外发布的资源。

@Path("hello")
public class Hello {
	@GET
	@Path("{id}")
	@Produces(value = MediaType.APPLICATION_XML)
	public Student getStudent(@PathParam("id") int id) {
		Student s = new Student();
		s.setId(id);
		s.setName("yel");
		s.setAddress("aaa");
		return s;
	}

	@POST
	@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
	@Produces(value = MediaType.APPLICATION_XML)
	public Student addStudent(@FormParam("name") String name, @FormParam("address") String address) {
		Student s = new Student();
		s.setId(0);
		s.setName(name);
		s.setAddress(address);
		return s;
	}
	
	@PUT
	@Consumes(MediaType.APPLICATION_XML)
	@Produces(value = MediaType.APPLICATION_XML)
	public Student updateStudent(JAXBElement<Student> s) {
		return s.getValue();
	}
	
	@DELETE
	@Path("{id}")
	public void deleteStudent(@PathParam("id") int id) {
		
	}
}

 

@XmlRootElement
public class Student {
	private int id;   
    private String name;   
    private String address;
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getAddress() {
		return address;
	}
	public void setAddress(String address) {
		this.address = address;
	}  
}

Hello类对应了需要发布的资源。4个状态分别对应HTTP请求的4种形式。Student类是返回结果,需要用@XmlRootElement注释。

 

  • 客户端调用 

GET请求,通过@PathParam获取路径参数,@Produces(value = MediaType.APPLICATION_XML)返回xml

Client client = ClientBuilder.newClient();
		WebTarget target = client.target("http://localhost:8080/HelloWorldServer").path("rest").path("hello").path("1");
		Response response = target.request().get();
		System.out.println(response.readEntity(String.class));

 

POST请求,@Consumes(MediaType.APPLICATION_FORM_URLENCODED)指定是表单提交,@FormParam获得表单数据。

Client client = ClientBuilder.newClient();
		WebTarget target = client.target("http://localhost:8080/HelloWorldServer").path("rest").path("hello");
		Form form = new Form();
		form.param("name", "yel");
		form.param("address", "bbbb");
		Response response = target.request().post(Entity.entity(form,MediaType.APPLICATION_FORM_URLENCODED_TYPE));
		System.out.println(response.readEntity(String.class));

 

PUT请求,@Consumes(MediaType.APPLICATION_XML)指定是xml提交,JAXBElement<Student> s将xml转换为对象。

Student s = new Student();
		s.setId(1);
		s.setName("yel");
		s.setAddress("bbbbbbb");
		Client client = ClientBuilder.newClient();
		WebTarget target = client.target("http://localhost:8080/HelloWorldServer").path("rest").path("hello");
		Response response = target.request().put(Entity.xml(s));
		System.out.println(response.readEntity(String.class));

 

DELETE请求

Client client = ClientBuilder.newClient();
		WebTarget target = client.target("http://localhost:8080/HelloWorldServer").path("rest").path("hello/1");
		Response response = target.request().delete();
		System.out.println(response.readEntity(String.class));

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值