过去的每一年,都会出现越来越多的Java框架。就像JavaScript一样,每个人都认为自己知道一个好的框架应该做什么。甚至我的老祖母现在都在使用我从未听说过而且可能永远也不会听说的框架。开个玩笑,市场上充斥着几乎无所不能的臃肿框架,但如何判断呢?本文旨在提供最好的JavaRESTful框架。我只介绍轻量级产品,跳过那些臃肿过度设计的框架。同时,我只希望它们稳定成熟,提供简单、轻量级的功能。我只是在介绍Play框架时打破了这条规则,原因稍后给出。在您未来的项目中使用哪种JavaRESTful框架完全取决于您当前的需求。为了方便您选择,我将列出最突出的框架功能,希望这可以节省您一些时间。Dropwizard诞生日期:2011评分:4.5/5Dropwizard提供了一个稳定成熟的Java库,并封装成一个简单的轻量级包。Dropwizard介于框架和库之间。它提供了开发Web应用程序所需的一切。得益于内置的模块化,应用程序可以保持小巧精简,从而减少开发和维护时间并减轻负担。Dropwizard使用现有的JettyHTTP库,嵌入在您的项目中,不需要外部服务器。所有Dropwizard项目都有一个main方法来管理内置的HTTP服务器。链接到官方站点GITHUB文档优点快速项目构建和启动模块化非常快(至少根据内置指标)HTTP的Jetty、REST的Jersey和JSON的Jackson还支持其他库,例如Mustache、Logback,JDBI,HibernateValidator,Guava,...使用Metrics支持监控Main方法启动Jettyserver,方便调试和维护。强大的社区力量。缺点:Dropwizard文档是一个主要的知识来源,但远非优秀。您可能需要搜索和挖掘第三方库的文档。出于某种原因,错误被视为纯文本,如果您希望响应始终为JSON,这可能会有问题。确保使用最新的Dropwizard,一些旧版本使用已弃用的第3方库。而且早期的Dropwizzard也很难升级example包.HelloWorldResource;导入com.example.helloworld.health.TemplateHealthCheck;publicclassHelloWorldApplicationextendsApplication{publicstaticvoidmain(String[]args)throwsException{newHelloWorldApplication().run(args);}@OverridepublicStringgetName(){返回“hello-world”;}@Overridepublicvoidinitialize(Bootstrapbootstrap){//nothingtodoyet}@Overridepublicvoidrun(HelloWorldConfigurationconfiguration,Environment环境){//nothingtodoyet}}Annotation个人不想推荐这个大型项目的框架。但如果你想尝试一下,你不会失望的。主要原因是该框架使用最新的现代JavaWeb组件,组装成一个简单易用的框架。不幸的是,这也带来了问题。组合这些库可能会导致无法预料的问题。这就是为什么我给它0.5星而不是满分5星的原因。Jersey诞生日期:2012(Jersey2.X)得分:5/5JerseyRESTful框架是一个开源的RESTful框架,它实现了JAX-RS(JSR311&JSR339)规范。它扩展了JAX-RS参考实现并提供了更多功能和工具以进一步简化RESTful服务和客户端开发。尽管它相对年轻,但它已经是一个生产级的RESTful服务和客户端框架。链接到官方网站GITHUB文档优点出色的文档和示例快速超级简单的路由平滑的JUnit集成就个人而言,在开发RESTful服务时,JAX-RS实现优于MVC框架。可以集成到其他库/框架(Grizzly、Netty)中。这可能是许多产品使用它的原因。支持异步链接不喜欢servlet容器?你可以在没有它们的情况下使用Jersey。GlassfishConsJersey2.0+中包含的WADL、XML/JSON支持使用了一些复杂的依赖注入实现可能不是一件坏事。Jersey1.X使用较旧的JAX-RS实现了大量仅支持Jersey1.X而在Jersey2.X中不可用的第三方库示例包org.glassfish.jersey.examples.helloworld;importjavax.ws.rs.GET;importjavax.ws.rs.Path;importjavax.ws.rs.Produces;@Path("helloworld")publicclassHelloWorldResource{publicstaticfinalStringCLICHED_MESSAGE="HelloWorld!";@GET@Produces("text/plain")publicStringgetHello(){returnCLICHED_MESSAGE;}}评论Jersey是我的选择,5星。NinjaWebFramework诞生:2012评分:3.5/5NinjaWebFramework是一个全栈javaweb框架。稳定、快速、可靠、生产级。它提供了开发、测试、发布和维护RESTfulWeb应用程序(Servlets、Guice、JPA、Flyway迁移、Maven等)的一切。与DropWizzard一样,NinjaWebFramework是一个集成的软件堆栈。您不必自己构建,只需使用Maven原型生成一个新项目,将其导入IDE并开始编码。官网链接GITHUB文档优点快速快速的项目构建和启动模块化的XML、HTML、JSON渲染也支持其他库(如Guice、Logback、Guava等)良好的数据持久化和缓存不喜欢servlet容器?你可以选择你喜欢的容器如果你根本不喜欢容器,你可以使用独立模式,使用Jetty作为一个自执行的jar缺点还有,像DropWizzard,文档是有但不够好。我花了很长时间才明白。这个框架还依赖很多其他的库,有时候获取需要的信息很麻烦。不是很有名,小社区。有传言说这个框架是由Play2.X用户创建的,他们切换到Scala示例包控制器;publicclassApplicationController{publicResultindex(){Personperson=newPerson();person.name="约翰约翰逊";返回Results.json().render(person);}}注释看起来不错,但在它成熟之前我会先不管它。PlayFramework诞生:2011评级:4/5使用PlayFramework轻松创建、构建和发布Web应用程序,支持Java和Scala。它使用基于轻量级无状态架构的Akka。它应该用于大规模低CPU和内存消耗的应用程序。官网链接GITHUB文档优点易于开发,速度快,但不如其他一些框架基于Netty,支持非阻塞I/O。在并行处理远程调用时非常出色。社区很大而且速度很快。项目构建与启动ModularMVCREST,JSON/XML,WebSockets,non-blockingI/O刷新浏览器就能看到最新的变化支持Async有出版书籍Cons2.0版是最具争议的Java框架。转向Scala使一些Java开发人员感到愤怒。不向后兼容;Play2.X重写了本应轻巧但臃肿的SBT构建工具。被称为Maven杀手,但永远无法取代它。难以学习和配置非servlet跨版本的重大更改示例包控制器导入play.api._importplay.api.mvc._class应用程序扩展控制器{defhello(name:String)=Action{Ok("Hello"+name+"!")}}Annotation抱怨就是抱怨,我还是喜欢和***这个框架。遗憾的是,我只能给它4星。我坚信基于JAX-RS的框架更适合RESTfulWeb服务。RestExpress出生日期:2009得分:3/5RestExpress是一个非容器的轻量级NettyHTTP堆栈包装器,用于更轻松地创建JavaRESTful服务。RestExpress目标是支持***的RESTful实践。链接GITHUB优点真正的微框架卓越的性能、快速、可靠的XML/JSON最古老和最稳定的RESTful框架之一缺点没有文档几乎没有支持小型社区示例包com.example;importjava.io.IOException;importio.netty.handler.codec.http.HttpMethod;importorg.restexpress.RestExpress;publicclassMain{publicstaticRestExpressstartServer(String[]args)throwsIOException{RestExpressserver=newRestExpress();我的资源r=新的我的资源();server.uri("/myapp/myresource",r).method(HttpMethod.GET).noSerialization();server.uri("/myapp/myresource",r).method(HttpMethod.POST);服务器.绑定(8080);返回服务器;}publicstaticvoidmain(String[]args)throwsException{RestExpressserver=startServer(args);System.out.println("按回车键停止它...");系统.in.read();服务器.shutdown();}}注意尽管这个框架非常快,但我不想推荐它。糟糕的文档和没有支持使它成为一个低于标准的框架。给它3星的速度。Restlet诞生:2005评分:4.5/5Restlet帮助Java程序员构建符合RESTful架构模型的大规模、快速的WebAPI。它提供了强大的路由和过滤系统。统一的客户端/服务器JavaAPI。满足所有主要平台(JavaSE/EE、GoogleAppEngine、OSGi、GWT、Android)并提供无数扩展来满足程序员的需求。据我所知,它是第一个javaRESTfulweb框架。许多公司都在使用它,但您可能从未听说过它,就像看不见它一样。官网链接GITHUB文档优势强大的企业级框架多平台JavaSE、JavaEE、GoogleWebToolkit、GoogleAppEngine、Android、OSGi环境支持JAX-RS(如Jersey)最先进的RESTful支持模块化支持其他库开发Smarturlbinding一直活跃,功能齐全的URIrouting有相关书籍Cons非常陡峭的学习曲线封闭的社区,虽然它在StackOverflow上仍然开放它不再流行,更多是因为PlayFramework和JerseyexamplespublicclassPart03extendsServerResource{publicstaticvoidmain(String[]args)throwsException{//创建HTTP服务器并监听端口8182newServer(Protocol.HTTP,8182,Part03.class).start();}@Get("txt")publicStringtoString(){返回“你好,世界”;}}注意尽管这个框架仍然很流行,但考虑到它的年代和当前的完成状态,我不能给它5颗星。Restx诞生:2013评分:3.5/5Restx是一个轻量级、模块化、功能丰富、超快的开源JavaREST框架。链接到官方网站GITHUB文档优点快速、轻量级易于构建真正的微框架模块化支持其他库支持MongoDB缺点不友好且令人困惑的文档。对于这种框架,我希望有更好的文档。太年轻了,不支持异步Async。示例@GET("/message/{id}")publicMessagesayHello(Stringid,//pathparamStringwho//queryparam){returnnewMessage().setMessage(String.format("hello%s,it's%s",谁,DateTime.now().toString("HH:mm:ss")));}@POST("/message/{id}")publicMessagesayHello(Stringid,//pathparamMessagemsg//bodyparam){returnmsg.setMessage(String.format("%s@%s",msg.getMessage(),DateTime.now().toString("HH:mm:ss")));}Notes老实说,我并没有在这个框架上花太多时间。不值得在另一个框架上花费太多精力,我的意思是,Java框架市场已经变得越来越碎片化,就像JavaScript市场一样,这种趋势应该停止。SparkFramework诞生时间:2011评分:3.5/5不要和Apache的大数据框架Spark混淆,这里的Spark框架是一个用于快速开发的轻量级Javaweb框架(50%的Spark用户使用Spark创建RESTAPI)。它的灵感来自于Ruby框架Sinatra。它拥有不到1M的最小内核,并提供构建RESTful或传统Web应用程序的所有基本功能。官网链接GITHUB文档优势快速、轻量级优秀的快速原型制作易于构建经常与AngularJS一起使用真正的微框架使用Jetty可以在容器中使用或独立运行缺点文档可以更好,不适合初学者不适合大型小型项目社区示例}}annotation该框架适合初期开发。主要用于小型项目或原型。