resteasy-links的研究(二)
上一篇文章讲解了resteasy-links
的实现和工作机制,这篇文章通过一个实际的例子来看一下resteasy-links
的具体工作过程。
首先这个例子在这里:
把上面的例子clone到本地,然后编译项目:
$ mvn install
编译好以后,启动服务:
$ mvn jetty:run
以下是服务的编译和启动情况:
服务启动以后,使用http
命令访问服务:
$ http -v http://localhost:8080/links
以下是服务的访问情况:
可以看到atom link的数据可以封装在response里面返回了。
接下来看一下这个项目的实现:
如上所示,这个项目包含一个FooResource
,用来提供服务,然后包含一个Fruit
的class,这个Fruit
的class是用JAXB的annotations标记过了:
因此后续它可以被序列化成xml数据。
看了下这个demo项目的架构,回顾一下前一篇文章中说的,resteasy-links
的工作机制:
- 把需要生成atom links信息的方法标记上
@AtomLink
。 - 把需要扫描并处理类型class的方法标记上
@LinkResource
。 - 在resource class里面添加
RESTServiceDiscovery
实例进行信息注入。
把这三条对应到本文样例项目的具体代码里,首先是fruit这个代码:
可以看到RESTServiceDiscovery
必须作为XmlElement
在我们的data class里面,用来形成atom link数据。
回过头再来看一下RESTServiceDiscovery
的class diagram:
可以看到AtomLink
是RESTServiceDiscovery
里面的一个inner class。其中AtomLink
本身也是一个jaxb标记过的class:
所以这个RESTServiceDiscovery
和它包含的AtomLink
是要被resteasy-links
模块来注入的。接下来看FooResource
的源代码:
这个代码里面的注释已经写清楚@AddLinks
和@LinkResource
的工作机制了,用来对应前面文章所分析的resteasy-links
内部工作原理。
以上就是本文的内容。