JAX-RS初步介绍
JAX-RS 是代表restful web service的一套规范API,JAX-RS规范基于JAVA编程语言,它是用来创建Restful 风格的web services服务的。JAX-RS使用一系列注解来简化java开发。
JAX-RS也称JSR339 (全称java specifications requests java规范提案第339个),由jcp(java community process)组织经过投票通过。
为了加深对jsr的理解,举一个简单的例子,jsr 330标准就是依赖注入的提案,已经通过。
规范说明
规范定义了一些常见的注解(见下表),用来标注一种资源文件为restfun风格的资源文件:
Jersey
Jersey RESTful 框架是开源的RESTful框架, 实现了JAX-RS (JSR 311 & JSR 339) 规范。它扩展了JAX-RS 参考实现, 提供了更多的特性和工具, 可以进一步地简化 RESTful service 和 client 开发。尽管相对年轻,它已经是一个产品级的 RESTful service 和 client 框架。与Struts类似,它同样可以和hibernate,spring框架整合。
由于ssm整合在市场的占有率太高,所以很少一部分人去关注Jersey。所以网上有关于Jersey的介绍很少。但是它确实是一个非常不错的框架。对于请求式服务,对于GET,DELETE请求,你甚至只需要给出一个URI即可完成操作。
下面使用springboot整合jersey开发一个例子,首先创建项目:
可以看到测试接口只依赖一个jersey组件即可,要使用jersey,原来的web组件不用依赖了。
首先写一个不带参数的控制器:
然后来一个带参数的:
我们这时候启动服务,访问接口,是无法访问的:
两个接口都是提示报404,找不到。原因是我们的控制器bean需要注册到ResourceConfig中,n那么什么是ResourceConfig?
ResourceConfig
为了方便我们自定义应用,Jersey提供了org.glassfish.jersey.server.ResourceConfig类来简化我们的操作。ResourceConfig类是Jersey自己实现了Application,并且还实现了Configuration接口。
ResourceConfig类提供了非常多的方法来注册JAX-RS组件,比如自动的资源类扫描就是其提供的众多功能之一。
我们想要使用ResourceConfig类来注册我们自己的组件,只需要继承ResourceConfig,并且在构造方法中,注册我们自己的组件即可。
例如,把控制器的几个Bean注册进去可以这样写:
这时候,重启服务,访问即可成功:
如果控制器有多个,这样写显然很麻烦,那么扫码包路径是更好的选择:
上面的路径是可以传多个的,这时候重启,发现可以访问:
ResourceConfig中常用的方法如下:
packages:提供自动扫描组件,包括资源类,Provider,Feature;如果有多个包需要扫描,用分号隔开;
registerClasses:提供手动注册组件,包括资源类,Provider,Feature等,提供可变参数同时注册多个;
register:提供手动注册组件,包括Provider和Feature;
property:提供手动添加配置选项的方法;
例如:
代码:https://gitee.com/blueses/spring-boot-demo