i'd also agree with going the route of #2, and keeping GWT-RPC for
convenience. yes, it's nice architecturally to say your client and
server are loosely coupled via JSON, but in practice writing JSNI
objects to read the JSON is hard to debug and can be rather tedious.
i did that previously with a grails backend, and because grails at
that point was unproven to me wanted to be able to swap it out for
something later and not even tie myself into a java backend. i
wouldn't recommend it. unless you have requirements that you can't
have a java backend or really don't think it's going to last, i'd keep
GWT-RPC and have that attach to spring as the previous poster
mentioned.
you might also have requirements of different (non-GWT) clients
calling your restful server side and still want to go with JSON, but
again i'd think about having multiple input/output formats (GWT-RPC,
JSON, XML, etc) all calling into the same services layer instead of
trying to standardize on one input/output data format.
hope that helps!
ps. only my $.02, not necessarily an expert opinion. :)