使用Java技术创建RESTful Web服务

JAX-RS(JSR-311)是在Java EE环境中提供RESTful服务功能的规范。 它有望为您提供传统的基于SOAP的Web服务的可行替代方案。

在本文中,了解JAX-RS的主要组件。 一个示例说明了企业如何使用JAX-RS中的功能以RESTful方式公开员工联系信息。

背景

多年来,开发人员已经使用各种工具在其Java应用程序中创建RESTful服务。 凭借REST体系结构的简单性,可以通过一个简单的Java Web容器满足主要要求(能够接收HTTP消息和标头)。

Java servlet通常用于开发RESTful应用程序。 没有使用servlet的说明性模式。 通常,Servlet将接受请求并解析HTTP请求URI本身,以将请求与已知资源进行匹配。 对于REST服务开发,简单的servlet模型在更加形式化的API中进行了扩展。 但是,由于API是在servlet模型的顶部开发的,所以没有一个是作为正式标准开发的。

随着REST被越来越多地用作体系结构,Java Community Process(JCP)试图在即将发布的Java Enterprise Edition 6版本中包括对REST的正式支持。 创建JSR-311并产生了JAX-RS 1.0规范,它提供了一种新的基于注释的方法来开发RESTful服务。 与Servlet模型相反,JAX-RS批注使您可以专注于资源和数据对象。 并且,您不再需要开发通信层(通过servlet)。

Java资源

JAX-RS建立了一个本地语言来描述其编程模型所代表的资源。 有五个主要项目:根资源,子资源,资源方法,子资源方法和子资源定位符。

根资源

根资源是带有@Path注释的Java类。 @Path批注提供了一个value属性,该属性指示资源可用的路径。 value属性可以是文字字符,变量或变量加上自定义的正则表达式。 清单1显示了一个示例。

清单1. JAX-RS根资源
package com.ibm.jaxrs.sample.organization;

import javax.ws.rs.Path;

@Path(value="/contacts")
public class ContactsResource {
	...
}

子资源

子资源是由于子资源定位器调用而返回的Java类。 它们与根资源相似,不同之处在于它们不使用@Path注释,因为它们的路径在子资源定位器上描述。 子资源通常包含使用HTTP请求方法指定符注释的方法来处理请求。 如果它们不包含此类带注释的方法,则它们将通过委派给适当的子资源定位器来进一步解决处理请求的资源。

清单2. JAX-RS子资源
package com.ibm.jaxrs.sample.organization;

import javax.ws.rs.GET;

public class Department {
	

	
	@GET
	public String getDepartmentName() {
		...
	}
	

	
}

上面的清单2显示了ContactsResource.getContactDepartment方法返回的子资源。 在这个例子中,如果一个HTTP GET请求被发送到/contact/{contactName}/department道路, getDepartmentName在资源法Department子资源将处理该请求。

资源方法

资源方法是根资源或子资源中绑定到HTTP方法的Java方法。 绑定是通过@GET注释之类的注释完成的。

清单3. JAX-RS资源方法
package com.ibm.jaxrs.sample.organization;

import java.util.List;
import javax.ws.rs.GET;
import javax.ws.rs.Path;

@Path(value="/contacts")
public class ContactsResource {
	
	
	
	@GET
	public List<ContactInfo> getContacts() {
		...
	}
	

}

在清单3的示例中,发送到/contacts路径的HTTP GET请求将由getContacts()资源方法处理。

子资源方法

子资源方法与资源方法非常相似。 唯一的区别是子资源方法还带有@Path注释,从而进一步限定了方法的选择。

清单4. JAX-RS子资源方法
package com.ibm.jaxrs.sample.organization;

import java.util.List;
import javax.ws.rs.GET;
import javax.ws.rs.Path;

@Path(value="/contacts")
public class ContactsResource {
	
	@GET
	public List<ContactInfo> getContacts() {
		...
	}
	
	
	
	@GET
	@Path(value="/ids")
	public List<String> getContactIds() {
		...
	}
	

}

在清单4中,发送到/contacts/ids

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值