Cómo implementar un API REST en Java/JEE

Me pidieron consejo hace unos días sobre este tema.  Personalmente, a día de hoy sólo recomiendo estas opciones, muy parecidas y que se basan en anotar las clases Java:

    @Path("/product/{id}")
    public class ProductResource {
        @GET
        public String get(@PathParam("id") String id) {
            return ...;
        }
    }
@Controller
public class ProductResource {
    @RequestMapping(value="/product/{id}", method=RequestMethod.GET)
    public Product get(@PathVariable int id) {
        return ...;
    }
}
@WebServlet(urlPatterns={"/product/*"}
public class ProductResource extends HttpServlet {
    public void service(ServletRequest req, ServletResponse res)
            throws IOException, ServletException {
        // Esta parte sería más fea
        // Parsear la URL para extraer parámetros...
    }
}

Mi consejo

Es difícil decantarse porque las diferencias acaban siendo sutiles. Dejo algunas consideraciones que se podrían tener en cuenta:

Espero vuestros comentarios, aunque sea para contar lo fácil que sería todo esto con Ruby on Rails.

Disclaimer: Todos los extractos de código del artículo están escritos sin probar.