- 浏览: 1222916 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (883)
- Spring (101)
- Swing (1)
- Mysql (21)
- Js (59)
- Jsp (2)
- Hibernate (19)
- Myeclipse (5)
- SqlServer 2000 (2)
- poi (15)
- Java (70)
- SSH (12)
- Html (47)
- Fusion Charts (1)
- C\C++ (2)
- 汇编 (36)
- Jquery (37)
- Struts2 (6)
- Ubuntu (16)
- powerDesinger (4)
- Jboss (3)
- JAX-RS (13)
- JAXB (5)
- JAX-WS (11)
- JMS (4)
- WebSocket (8)
- PHP (16)
- Flash (1)
- maven (3)
- Oracle (8)
- HttpClient (6)
- sqlserver (19)
- svn (5)
- Tomcat (3)
- Jdbc (3)
- EsayUi (11)
- 微信公众平台 (19)
- IIS (2)
- Freemarker (11)
- Comet (1)
- Spring MVC (85)
- JBoss Seam (3)
- 二维码 (9)
- Spring Security (4)
- Ehcache (3)
- Apache Shiro (7)
- jackson (16)
- JPA (8)
- jcaptcha (2)
- RSA (2)
- Ajax (6)
- 跟我学Shiro (0)
- Spring4 (19)
- 跟我学spring3 (0)
- css (32)
- excel (4)
- Filter (3)
- 微信公众帐号开发教程 (0)
- Android (6)
- log4j (6)
- 淘宝接口 (17)
- 支付集成 (3)
- 单点登录 (3)
- Html5 (27)
- 移动平台前端 (3)
- Linux (44)
- FusionCharts (27)
- Json Jackson Xml (5)
- 方培工作室-微信开发 (0)
- Apache与Tomcat与IIS整合 (10)
- Nginx (17)
- webService (2)
- apache (4)
- lucene (3)
- lodop (2)
- Shiro (3)
- zTree (2)
- ireport (12)
- Servlet3.0 (5)
- 前端美工 (19)
- AngularJS (1)
- C#开发微信门户及应用 (0)
- Shell (3)
- bat脚本 (16)
- Bootstrap (26)
- Less (10)
- photoshop (6)
- Redis (6)
- Mongodb (10)
- MyBatis (3)
- 数据结构 (0)
- 读写分离-主从复制 (0)
- JFinal (0)
- 百度地图api (3)
- hadoop-hbase-hive-spark (3)
- WebStorm (2)
- Quartz (5)
- ios (0)
- Mina (8)
- Android Studio (4)
- Ratchet教程 (0)
- 移动端重构系列 (1)
- cubic-bezier贝塞尔曲线CSS3动画工具 (1)
- nginx+tomcat+memcached集群 (0)
- 集群 (0)
- ZooKeeper (3)
- Dubbo (0)
- vpn (0)
- kafka (0)
- JVM垃圾回收机制 (0)
- 微信小程序 (0)
- Lua (0)
- Hystrix (0)
- Vue.js (0)
- mycat (0)
- Openresty (0)
- springBoot (0)
- 新分类 (0)
- guava (0)
- 大数据 (0)
- Sentinel (0)
最新评论
-
JackMacing:
中文怎么解决?
SpringMVC与iReport(JasperReports) 5.6整合开发实例 -
18335864773:
用pageoffice把.可以实现在线的文档操作.直接转pdf ...
转:使用jasperreport动态生成pdf,excel,html -
linhao0907:
推荐一款轻量开源的支付宝组件:https://github.c ...
关于Alipay支付宝接口(Java版) -
songronghu:
太好了,非常有用,谢谢分享~
Java ConcurrentModificationException 异常分析与解决方案 -
wzwahl36:
http://www.atool.org/json2javab ...
Java下利用Jackson进行JSON解析和序列化
一、若希望一个Java类能够处理REST请求,则这个类必须至少添加一个@Path("/")的annotation;对于方法,这个annotation是可选的,如果不添加,则继承类的定义。
二、一个方法上只有添加了某个Http Method的annotation,例如@GET,才有资格处理请求。
三、@Path里的值可以是一个复杂的表达式,例如@Path("{id}") ,其中 {id}表达式代码了一个模板参数;一个模板参数是一个定义在@Path里的通配符,它以 { 开始,中间是一堆字母和数字的混合串(不能包含 / 字符),以 } 结尾。又如: @Path("{firstName}-{lastName}") .
四、@Path也支持正则表达式,例如: @Path("{id: \\d+}") ,其中 \\d+ 表示一个数字。格式为: A : B
五、可以自定http method的annotation,具体参考已经有的实现,例如@GET的实现:
- @Target({ElementType.METHOD})
- @Retention(RetentionPolicy.RUNTIME)
- @HttpMethod(HttpMethod.GET)
- public @interface GET {
- }
其中HttpMethod的实现为:
- @Target({ElementType.ANNOTATION_TYPE})
- @Retention(RetentionPolicy.RUNTIME)
- @Documented
- public @interface HttpMethod {
- /**
- * HTTP GET method
- */
- public static final String GET="GET";
- /**
- * HTTP POST method
- */
- public static final String POST="POST";
- /**
- * HTTP PUT method
- */
- public static final String PUT="PUT";
- /**
- * HTTP DELETE method
- */
- public static final String DELETE="DELETE";
- /**
- * HTTP HEAD method
- */
- public static final String HEAD="HEAD";
- /**
- * HTTP OPTIONS method
- */
- public static final String OPTIONS="OPTIONS";
- /**
- * Specifies the name of a HTTP method. E.g. "GET".
- */
- String value();
- }
因此,可以如下自定义新的http 请求方法:
- @Target({ElementType.METHOD})
- @Retention(RetentionPolicy.RUNTIME)
- @HttpMethod("LOCK")
- public @interface LOCK {
- }
注:请不要试图重写HttpMethod annotation。
六、Path的优先级规则
- 首先检查匹配的字符的个数,匹配的个数越多越优先
- 其次检查内嵌的模板表达式的个数,个数越多越优先
- 最后是非缺省模板表达式的个数;缺省模板即未定义正则表达式的模板
例如以下顺利:
- 1 /customers/{id}/{name}/address
- 2 /customers/{id : .+}/address
- 3 /customers/{id}/address
- 4 /customers/{id : .+}
如果以上匹配不能解决你的问题,那多半是因为你的设计过于复杂,需要重新审视。
七、允许、保留和需要转意的字符
- 所以有 a-z、A-Z、0-9 都被允许
- 所有: _-!.~'()* 都被允许
- 所有: ,;:$&+=?/[]@ 都是保留字符 (需要转意)
- 所有其他字符需要用 % 进行转意;格式为 %HH (%加两个十六进制数)
注:如果Path中uri的表达式包含有需要转意的字符,JAX-RS会自动进行转意;否则会视之为已经进行了URL的encoding。
八、Matrix Param
Matrix Param是一个嵌在URI字符串中的name-value对,例如:
http://example.cars.com/mercedes/e55;color=black/2006
Matrix Param用于修饰特定的片段,如上修饰e55片段;不同于Query Param,用于修饰整个URI资源。
Matrix Param不出现在@Path的表达式中,例如以上URI对应的@Path的表达式可能是:@Path("/e55/{year}")。
但是可以用@MatrixParam annotation来取得Matrix Param的值,例如:@MatrixParam("color")
九、Subresource Locators
Subresources Locators是指一个指定了@Path annotation,但未指定HttpMethod的annotation,例如@GET,的Java方法。这个方法返回一个含有JAX-RS annotation的REST Service对象,这个对象知道怎么去分发剩余的请求。
例如:
- @Path("/customers")
- public class CustomerDatabaseResource {
- @Path("{database}-db")
- public CustomerResource getDatabase(@PathParam("database") String db) {
- // find the instance based on the db parameter
- CustomerResource resource = locateCustomerResource(db);
- return resource;
- }
- protected CustomerResource locateCustomerResource(String db) {
- ...
- }
- }
其中CustomerResource可能是:
- public class CustomerResource {
- private Map<Integer, Customer> customerDB =
- new ConcurrentHashMap<Integer, Customer>();
- private AtomicInteger idCounter = new AtomicInteger();
- @POST
- @Consumes("application/xml")
- public Response createCustomer(InputStream is) {
- ...
- }
- @GET
- @Path("{id}")
- @Produces("application/xml")
- public StreamingOutput getCustomer(@PathParam("id") int id) {
- ...
- }
- @PUT
- @Path("{id}")
- @Consumes("application/xml")
- public void updateCustomer(@PathParam("id") int id, InputStream is) {
- ...
- }
- }
因为CustomerResource 并不打算做一个Service暴露,所以在类上没有添加@Path的annotation。
十、完全动态分发
所谓完全分发,就是实现类可以是任意类,例如上面的CustomerDatabaseResource的getDatabase()方法的实现可以改为:
- @Path("/customers")
- public class CustomerDatabaseResource {
- protected CustomerResource europe = new CustomerResource();
- protected FirstLastCustomerResource northamerica =
- new FirstLastCustomerResource();
- @Path("{database}-db")
- public Object getDatabase(@PathParam("database") String db) {
- if (db.equals("europe")) {
- return europe;
- }
- else if (db.equals("northamerica")) {
- return northamerica;
- }
- else return null;
- }
- }
这里返回值是一个Object,已经不再局限于CustomerResource类了。JAX-RS会检查这个实例,以决定怎么分发请求。
发表评论
-
JAX-RS入门 十二: 可伸缩的JAX-RS应用
2012-09-11 19:10 689一、HTTP Caching HTTP1.0中定义了E ... -
JAX-RS入门 十一:HATEOAS
2012-09-11 19:09 730HATEOAS全称:超媒体即状态应用引擎 (Hypermedi ... -
JAX-RS入门 十: 兼容与演进
2012-09-11 19:09 848网络服务会随着时间 ... -
JAX-RS入门 九: 内容约定(2)
2012-09-10 23:33 629JAX-RS与Conneg JAX-RS有一些用来帮助 ... -
JAX-RS入门 九: 内容约定(1)
2012-09-10 23:32 652通常一个SOA的应用都需要足够的灵活,以便于各种不同的客户端或 ... -
JAX-RS入门 八: HTTP响应
2012-09-10 23:32 1024首先先看一下HTTP中定义的响应码及其意义: ... -
JAX-RS入门 七: 数据处理(2)
2012-09-10 23:31 864上节介绍了JAX-RS中怎么与一些基础的对象进行交互,这节介绍 ... -
JAX-RS入门 六: 数据处理(1)
2012-09-10 23:30 907接下来要花两小节来介绍一下JAX-RS中的数据处理(Data ... -
JAX-RS入门 五: 自动类型转换
2012-09-09 12:41 702一、默认类型转换规则 在上一节中,已经了解了怎么使用那 ... -
JAX-RS入门 四: 注入
2012-09-09 12:39 1111一、Annotations @javax.ws.rs.Pa ... -
JAX-RS入门 二 :运行
2012-09-09 12:31 961上一节,已经成功的定义了一个REST服务,并且提供了具体的 ... -
JAX-RS入门 一 :基础
2012-09-09 12:29 1745简介 JAX-RS是一套用java实现REST服务的规范,提 ...
相关推荐
2. **JAX-RS**: JAX-RS是处理RESTful服务的Java标准。CXF提供了对JAX-RS的强大支持,允许开发者使用注解来快速创建资源类,定义HTTP方法和URL映射,从而构建RESTful服务。 【WebService视频教程内容预览】 在...
- **JAX-WS与JAX-RS实现**:CXF提供了JAX-WS的完全实现,用于创建SOAP服务;同时,它也是JAX-RS规范的重要实现者,支持RESTful服务开发。 - **数据绑定**:CXF支持多种数据绑定技术,如JAXB(Java Architecture ...
CXF是基于Apache基金会的项目,它提供了SOAP、RESTful、JAX-RS、JAX-WS等接口的支持,可以方便地创建Web服务。CXF的核心功能包括服务建模、绑定生成、服务实现和部署,以及客户端代理和服务代理的生成。它的设计...
- **使用JAX-RS规范**:CXF支持JAX-RS 2.0规范,这使得开发者可以使用注解来轻松地创建RESTful服务。 - **资源路径和请求映射**:通过注解如`@Path`、`@GET`等来指定资源路径和HTTP方法。 ##### 4. **部署与配置** ...
JAX-WS提供了从Java接口到SOAP消息的自动绑定,使得开发人员可以更专注于业务逻辑,而不是底层的消息交换细节。 另一个重要的Java Web服务框架是Java EE中的Java API for RESTful Web Services (JAX-RS),它遵循...
5. **REST工具推荐**:推荐了一些成熟的工具和框架,如Jersey项目及JAX-RS标准,以及WADL(Web Application Description Language,Web应用描述语言)等。 #### 五、Jersey项目与JAX-RS标准 - **JAX-RS**(Java API...
- **JAX-RS集成**:Seam 2.1集成了JAX-RS (JSR-311),这是RESTful Web服务的Java标准之一。这意味着开发者可以直接利用这些标准来构建RESTful应用。 - **RESTeasy集成**:RESTeasy是由JBoss成员Bill Burke开发的一个...
2. **RESTful服务支持**:除了SOAP,CXF也支持基于HTTP协议的RESTful服务,使得开发人员可以利用JAX-RS(Java API for RESTful Web Services)标准来创建RESTful API。 3. **数据绑定**:CXF包含了对JAXB(Java ...
<artifactId>resteasy-jaxrs 版本号 <groupId>org.jboss.resteasy <artifactId>resteasy-client 版本号 ``` 然后,创建一个简单的 Java 类,实现 RESTful 接口。例如,我们可以创建一个名为 `...
- **Apache CXF**:这是一个智能的Web服务套件,支持JAX-WS和JAX-RS标准。 - **Apache Karaf**:这是一个小型的基于OSGi的运行时环境,允许部署应用程序。 - **Apache MINA**:这是一个高性能的、基于NIO的网络...
在支持的标准方面,CXF涵盖了JAX-WS、JSR-181、SAAJ、JAX-RS等,以及各种SOAP版本和WSDL规范。同时,它支持多种数据绑定机制,如JAXB 2.x、Aegis、XMLBeans和SDO,并能处理XML、JSON、FastInfoset等多种数据格式。在...
1. **定义服务接口**:使用Java接口来定义Web服务的契约,可以使用JAX-RS或JAX-WS的注解来标注方法。 2. **实现服务接口**:创建接口的实现类,业务逻辑在此处编写。 3. **配置服务**:可以通过XML配置文件或注解来...
Quarkus通过集成各种Java生态系统中的流行库,如JAX-RS(Java API for RESTful Web Services)和Quarkus Reactor,来实现这一目标。 标题“Quarkus示例列表”表明我们将探讨一系列使用Quarkus构建的应用示例,这些...
6. **Web服务支持**:Java EE 5也包含了对SOAP和RESTful Web服务的支持,通过JAX-WS和JAX-RS,开发者可以轻松地创建和消费Web服务,实现不同系统间的互操作性。 7. **容器管理**:Java EE 5提供了强大的容器,如...
6. **Web服务**:Java EE 5支持SOAP和RESTful Web服务,通过JAX-WS和JAX-RS规范,使得开发人员可以轻松地创建和消费Web服务。 7. **Java Message Service (JMS)**:JMS是Java EE的一部分,用于异步通信和消息传递。...
本书《Beginning JAVA EE 7经典》是一本专注于Java EE(Java Platform, Enterprise Edition)7规范的入门到高级技术指导书籍,涵盖了Java EE核心技术如JSF(JavaServer Faces)、CDI(Contexts and Dependency ...
除此之外,手册中还提到了jOOQ与多种现代开发工具和框架的集成,如现代集成开发环境(IDEs)、Spring、Apache DBCP、Flyway、JAX-RS等,以及如何在这些环境中高效使用jOOQ。同时,手册也讨论了jOOQ与Java 8、JavaFX...
CXF是一个开源的服务框架,它提供了多种方式来创建Web服务,包括基于JAX-RS(Java API for RESTful Web Services)的标准方法。在CXF中,我们可以使用`@Path`、`@GET`、`@POST`等注解来定义服务端点和HTTP操作。例如...
Feign支持多种注解,包括它自身的Feign注解和JAX-RS注解,同时Spring Cloud还为其添加了对Spring MVC注解的支持,使得与Spring生态的集成更为紧密。 在使用OpenFeign之前,通常我们会用到Ribbon来实现客户端负载...