Thank for your feedback! I've written that code more than 10 years ago, so
I'm sure there's room for improvements :-) . Feel free to open a PR if you
want.

On Thu, Jun 25, 2026 at 6:05 PM andrew goh via users <
[email protected]> wrote:

> hi, all,
>
> I'm playing a bit with REST APIs recently and found WicketStuff
> rest-annotations quite useful
>
>
> https://github.com/wicketstuff/core/tree/master/wicketstuff-restannotations-parent
>
> Though at present, I'm just started working with it.
>
> Prior this, I've looked at trying to integrate Eclipse Jersey
> https://eclipse-ee4j.github.io/jersey/
> or RESTEasy
> https://resteasy.dev/
>
> Initially, one of the stumbling blocks is authentication and
> authorization, especially if one intends to run such a service on the
> open internet. It isn't easy integrating with Wicket security for
> authentication/authorization with different architecture.
>
> doing REST API completely within Apache Wicket alleviates this issue. A
> problem is that I'd need to expose different http methods endpoints,
> e.g. with the use of custom resources. rest endpoints isn't just
> straightforward http get. restannotations has a proper implementation
> and did quite a lot more. e.g. that it automatically deserializes to
> Json via Gson etc.
>
> But that there are some currently I deemed minor issues and I'm still
> figuring out other use cases.
>
> Some of the issues encountered are like:
>
> - use AbstractRestResource as base class
>
> If you review the readme
>
> https://github.com/wicketstuff/core/tree/master/wicketstuff-restannotations-parent#readme
>
> it isn't initially apparent that a better practice is to build your rest
> classes by inheriting from AbstractRestResource
>
> https://github.com/wicketstuff/core/blob/master/wicketstuff-restannotations-parent/restannotations/src/main/java/org/wicketstuff/rest/resource/AbstractRestResource.java
>
> Initially, I'm troubleshooting why the RestAPI endpoints are not mapped.
> it turns out to use @ResourcePath("/mountedpath") and
> PackageScanner.scanPackage("your.restapi.package");
>
>
> https://github.com/wicketstuff/core/tree/master/wicketstuff-restannotations-parent#mounting-resources-to-a-specific-path
> it is necessary to subclass from AbstractRestResource as a REST API
> container class,
> then define the
> @MethodMapping("/apipath")
> methods as the rest endpoints for each method.
> After that the it correctly mount the rest endpoints, and practically
> many things 'just works'
> A good example is to look at the examples e.g.
>
> https://github.com/wicketstuff/core/blob/master/wicketstuff-restannotations-parent/restannotations-examples/src/main/java/org/wicketstuff/rest/resource/PersonsRestResource.java
> to see how it is implemented.
>
> - register the Json serializer and deserializer while constructing the
> class wrapper for the rest APIs.
> in the constructor one should have a line like.
>
>      public PersonsRestResource() {
>      super(new JsonWebSerialDeserial(new GsonObjectSerialDeserial()));
>
> to register the Json serializer / deserializer, this is what takes pojo
> classes including like List<Person>  etc and serialize them directly to
> json, practically no other codes is needed.
>
>
> https://github.com/wicketstuff/core/blob/77dc12337444090867368e972cb66d35c048ce37/wicketstuff-restannotations-parent/restannotations-examples/src/main/java/org/wicketstuff/rest/resource/PersonsRestResource.java#L35
>
> but that I encountered a rather tricky situation where the default Gson
> serializer / deserializer can't convert a particular class / structure
> in a class / object. it needs an (custom) adapter to do that
> serialization / deserialization.
> A trouble with the above is that in the earlier java versions superclass
> constructor calls has to be the first line of code in the constructor.
> This is a bit of trouble as I had trouble building a custom Gson()
> object that has the conversion adapters registered.
> I end up using discrete classes for the converters and used the Gson
> builder in a fluent notation to build the Gson() converter object within
> the constructor call.
>
> hope this helps if anyone is working with the restannotations library
>
> note also that WicketStuff rest annotations is directly available as a
> dependency in maven central. e.g.
>
> https://central.sonatype.com/artifact/org.wicketstuff/wicketstuff-restannotations
> verify that by matching the pom entries in the github repo with that in
> maven central.
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [email protected]
> For additional commands, e-mail: [email protected]
>
>

-- 
Andrea Del Bene.
Apache Wicket committer.

Reply via email to