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的工作机制:

把这三条对应到本文样例项目的具体代码里,首先是fruit这个代码:

可以看到RESTServiceDiscovery必须作为XmlElement在我们的data class里面,用来形成atom link数据。

回过头再来看一下RESTServiceDiscovery的class diagram:

可以看到AtomLinkRESTServiceDiscovery里面的一个inner class。其中AtomLink本身也是一个jaxb标记过的class:

所以这个RESTServiceDiscovery和它包含的AtomLink是要被resteasy-links模块来注入的。接下来看FooResource的源代码:

这个代码里面的注释已经写清楚@AddLinks@LinkResource的工作机制了,用来对应前面文章所分析的resteasy-links内部工作原理。

以上就是本文的内容。

My Github Page: https://github.com/liweinan

Powered by Jekyll and Theme by solid

If you have any question want to ask or find bugs regarding with my blog posts, please report it here:
https://github.com/liweinan/liweinan.github.io/issues