当前位置: 首页 > news >正文

哪个网站亲子游做的好温州建站方案

哪个网站亲子游做的好,温州建站方案,asp网站建设实录pdf,深圳工程交易服务主页spark restful最近#xff0c;我一直在使用Spark #xff08;一种Java的Web框架#xff0c;与Apache Spark 不相关#xff09;编写RESTful服务。 当我们计划写这篇文章时#xff0c;我已经做好了不可避免的接口#xff0c;样板代码和深层层次结构的Java风格的准备。 令我… spark restful 最近我一直在使用Spark 一种Java的Web框架与Apache Spark 不相关编写RESTful服务。 当我们计划写这篇文章时我已经做好了不可避免的接口样板代码和深层层次结构的Java风格的准备。 令我惊讶的是对于局限于Java的开发人员来说还有一个替代世界。 在本文中我们将了解如何使用JSON传输数据来为博客构建RESTful应用程序。 我们会看到 如何在Spark中创建一个简单的Hello World 如何指定请求中期望的JSON对象的布局 如何发送帖子请求以创建新帖子 如何发送获取请求以检索帖子列表 我们不会看到如何在数据库中插入此数据。 我们只将列表保留在内存中在我的实际服务中我一直在使用sql2o 。 一些依赖 我们将使用Maven因此我将首先创建一个新的pom.xml并添加一些内容。 基本上 火花 杰克逊 Lombok 番石榴 Easymock仅在测试中使用本文中未介绍 格森 dependenciesdependencygroupIdjunit/groupIdartifactIdjunit/artifactIdversion4.12/versionscopetest/scope/dependencydependencygroupIdcom.sparkjava/groupIdartifactIdspark-core/artifactIdversion2.1/version/dependencydependencygroupIdcom.fasterxml.jackson.core/groupIdartifactIdjackson-core/artifactIdversion2.5.1/version/dependencydependencygroupIdcom.fasterxml.jackson.core/groupIdartifactIdjackson-databind/artifactIdversion2.5.1/version/dependencydependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactIdversion1.16.2/versionscopeprovided/scope/dependencydependencygroupIdorg.sql2o/groupIdartifactIdsql2o/artifactIdversion1.5.4/version/dependencydependencygroupIdorg.postgresql/groupIdartifactIdpostgresql/artifactIdversion9.4-1201-jdbc41/version/dependencydependencygroupIdcom.google.guava/groupIdartifactIdguava/artifactIdversion18.0/version/dependencydependencygroupIdorg.easymock/groupIdartifactIdeasymock/artifactIdversion3.3.1/versionscopetest/scope/dependencydependencygroupIdcom.google.code.gson/groupIdartifactIdgson/artifactIdversion2.3.1/versionscopetest/scope/dependency/dependenciesbuildpluginsplugingroupIdorg.apache.maven.plugins/groupIdartifactIdmaven-compiler-plugin/artifactIdversion3.2/versionconfigurationsource1.8/sourcetarget1.8/target/configuration/pluginplugingroupIdorg.codehaus.mojo/groupIdartifactIdexec-maven-plugin/artifactIdversion1.2.1/versionconfigurationmainClassme.tomassetti.BlogService/mainClassarguments/arguments/configuration/plugin/plugins/build火花你好世界 你有这一切吗 酷那我们就写一些代码吧。 package me.tomassetti;import static spark.Spark.get; import static spark.Spark.post; import spark.Request; import spark.Response; import spark.Route;public class BlogService {public static void main( String[] args) {get(/posts, (req, res) - {return Hello Sparkingly World!;});} } 现在我们可以使用以下命令运行它 mvn compile mvn exec:java 让我们打开浏览器并访问localhost http// localhost4567 / posts 。 在这里我们要做一个简单的获取。 对于执行帖子您可能需要在浏览器中使用Postman插件或只运行curl 。 一切为您服务。 使用Jackson和Lombok进行很棒的描述性交换对象 在一个典型的RESTful应用程序中我们希望接收带有json对象的POST请求作为有效负载的一部分。 我们的工作将是检查代码是否为格式正确的JSON是否与预期的结构相对应值是否在有效范围内等等。无聊且重复。 我们可以用不同的方式做到这一点。 最基本的一种是使用gson JsonParser parser new JsonParser(); JsonElement responseData parser.parse(response); if (!responseData.isJsonObject()){// send an error like: Hey, you did not pass an Object! } JsonObject obj responseData.getAsJsonObject(); if (!obj.hasField(title)){// send an error like: Hey, we were expecting a field name title! } JsonElement titleAsElem obj.get(title); if (!titleAsElem.isString()){// send an error like: Hey, title is not an string! } // etc, etc, etc 我们可能不想这样做。 指定我们期望的结构的更具声明性的方法是创建特定的类。 class NewPostPayload {private String title;private ListString categories;private String content;public String getTitle() { ... }public void setTitle(String title) { ... }public ListString getCategories() { ... }public void setCategories(ListString categories){ ... }public String getContent() { ... }public void setContent(String content) { ... } } 然后我们可以使用Jackson try {ObjectMapper mapper new ObjectMapper();NewPostPayload newPost mapper.readValue(request.body(), NewPostPayload.class); } catch (JsonParseException e){// Hey, you did not send a valid request! } 这样杰克逊会自动为我们检查有效载荷是否具有预期的结构。 我们可能想验证是否遵守其他约束。 例如我们可能要检查标题是否为空并且至少指定了一个类别。 我们可以创建一个仅用于验证的接口 interface Validable {boolean isValid(); }class NewPostPayload implements Validable {private String title;private ListString categories;private String content;public String getTitle() { ... }public void setTitle(String title) { ... }public ListString getCategories() { ... }public void setCategories(ListString categories){ ... }public String getContent() { ... }public void setContent(String content) { ... }public boolean isValid() {return title ! null !title.isEmpty() !categories.isEmpty();} } 仍然有很多无聊的getter和setter方法。 它们的信息量不是很大只会污染代码。 我们可以使用Lombok摆脱它们。 Lombok是一个注释处理器可以为您添加重复方法gettersetterequalshashCode等。 您可以将其视为编译器的插件该插件可查找注释例如Data 并基于注释生成方法。 如果将其添加到依赖项中maven会很好但是您的IDE无法为Lombok添加的方法自动完成。 您可能要安装插件。 对于Intellij Idea我使用的是Lombok插件版本0.9.1它的效果很好。 现在您可以将类NewPostPayload修改为 Data class NewPostPayload {private String title;private ListString categories;private String content;public boolean isValid() {return title ! null !title.isEmpty() !categories.isEmpty();} } 好多了是吗 一个完整的例子 我们基本上需要做两件事 插入新帖子 检索整个帖子列表 第一个操作应实现为POST具有副作用而第二个操作应实现为GET。 它们都对posts集合进行操作因此我们将使用端点/ posts 。 让我们从插入帖子开始。 首先我们要解析 // insert a post (using HTTP post method)post(/posts, (request, response) - {try {ObjectMapper mapper new ObjectMapper();NewPostPayload creation mapper.readValue(request.body(), NewPostPayload.class);if (!creation.isValid()) {response.status(HTTP_BAD_REQUEST);return ;}int id model.createPost(creation.getTitle(), creation.getContent(), creation.getCategories());response.status(200);response.type(application/json);return id;} catch (JsonParseException jpe) {response.status(HTTP_BAD_REQUEST);return ;}}); 然后查看如何检索所有帖子 // get all post (using HTTP get method)get(/posts, (request, response) - {response.status(200);response.type(application/json);return dataToJson(model.getAllPosts());}); 最后的代码是 package me.tomassetti;import static spark.Spark.get; import static spark.Spark.post;import com.fasterxml.jackson.core.JsonParseException; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.SerializationFeature; import lombok.Data; import spark.Request; import spark.Response; import spark.Route;import java.io.IOException; import java.io.StringWriter; import java.util.HashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.stream.Collector; import java.util.stream.Collectors;public class BlogService {private static final int HTTP_BAD_REQUEST 400;interface Validable {boolean isValid();}Datastatic class NewPostPayload {private String title;private ListString categories new LinkedList();private String content;public boolean isValid() {return title ! null !title.isEmpty() !categories.isEmpty();}}// In a real application you may want to use a DB, for this example we just store the posts in memorypublic static class Model {private int nextId 1;private MapInteger, Post posts new HashMap();Dataclass Post {private int id;private String title;private ListString categories;private String content;}public int createPost(String title, String content, ListString categories){int id nextId;Post post new Post();post.setId(id);post.setTitle(title);post.setContent(content);post.setCategories(categories);posts.put(id, post);return id;}public ListPost getAllPosts(){return posts.keySet().stream().sorted().map((id) - posts.get(id)).collect(Collectors.toList());}}public static String dataToJson(Object data) {try {ObjectMapper mapper new ObjectMapper();mapper.enable(SerializationFeature.INDENT_OUTPUT);StringWriter sw new StringWriter();mapper.writeValue(sw, data);return sw.toString();} catch (IOException e){throw new RuntimeException(IOException from a StringWriter?);}}public static void main( String[] args) {Model model new Model();// insert a post (using HTTP post method)post(/posts, (request, response) - {try {ObjectMapper mapper new ObjectMapper();NewPostPayload creation mapper.readValue(request.body(), NewPostPayload.class);if (!creation.isValid()) {response.status(HTTP_BAD_REQUEST);return ;}int id model.createPost(creation.getTitle(), creation.getContent(), creation.getCategories());response.status(200);response.type(application/json);return id;} catch (JsonParseException jpe) {response.status(HTTP_BAD_REQUEST);return ;}});// get all post (using HTTP get method)get(/posts, (request, response) - {response.status(200);response.type(application/json);return dataToJson(model.getAllPosts());});} }使用PostMan尝试应用程序 如果您更喜欢命令行则可能要改用curl。 我喜欢不必转义JSON和使用基本的编辑器因此可以使用PostManChrome插件。 让我们插入一个帖子。 我们将所有字段指定为插入请求主体中的Json对象的一部分。 我们获取创建的帖子的ID。 然后我们可以获得帖子列表。 在这种情况下我们使用GET请求中没有正文并获取所有帖子的数据仅是我们在上面插入的帖子。 结论 我不得不说我对该项目感到非常惊讶。 我已经准备好了变得更糟这是一种需要基本逻辑和大量管道的应用程序。 我发现PythonClojure和Ruby在解决这类问题上都做得很好而当我用Java编写简单的Web应用程序时逻辑就被样板代码淹没了。 好吧事情可能会有所不同。 SparkLombokJackson和Java 8的结合确实很诱人。 我非常感谢这些软件的作者他们确实在改善Java开发人员的生活。 我认为这也是一个教训出色的框架通常可以使事情比我们想象的要好得多。 编辑我从reddit的好人那里收到了一个改进示例的建议。 谢谢 请保持良好的建议来 翻译自: https://www.javacodegeeks.com/2015/08/getting-started-with-spark-it-is-possible-to-create-lightweight-restful-application-also-in-java.htmlspark restful
http://www.sadfv.cn/news/397135/

相关文章:

  • 无锡网站备案wordpress必装
  • 网站的点击率怎么查国外注册公司流程及费用
  • 网站开发项目小组成员职责中国摄影网站有哪些
  • 重庆网站建设 九度互联一个小胖子从网站做任务的网站故事
  • 网站搭建崩溃用html制作网页
  • 文登网站建设软文推广怎么写
  • 档案网站建设与档案信息化营销型企业网站的类型
  • 上海自己注册公司流程及费用seo是什么职位
  • python 网站开发框架公司网站建设推进表
  • 做一个普通网站多少钱多备份 wordpress
  • 开封河南网站建设推广甘肃省
  • 为国外客户做网站建设域名提供商
  • 第一免费营销型网站用mcu做灯光效果网站
  • 做网站做58好还是赶集好天津seo博客
  • ui网页设计培训学校安卓优化大师下载
  • 做期货看什么网站的资讯网站二级目录打不开
  • 山西公司响应式网站建设平台网站建设中网站需求分析
  • 东莞企业网站建设设计如东建设网站
  • 重庆网站开发哪家好网站建设注意事项知乎
  • 公司网站建设山东外贸网站搭建
  • 西安电子科技大学信息化建设处网站广州大学生网页设计大赛
  • 上传软件的网站wordpress阅读全文插件
  • 网站建设文案策划网站域名asia是
  • 网站建设服务流程贵阳哪些公司建网站
  • 罗湖区网站公司北京中关村在线官网
  • 网上拿手工做的网站wordpress网站维护插件
  • 开发网站的申请怎么写网站开发摊销
  • 网站规划与建设的流程与方法 高中信息技术php网站后台入口
  • 怎么自己做充值网站苏州网站建设网站制作的公司
  • 广州营销网站建设广州抖音seo公司