我的团队正在考虑将sparkjava用于RESTful Web服务,但我对反序列化请求的选项不满意。
似乎选项是:
使用默认的反序列化,它只提供嵌套的地图结构,这违背了使用像Java这样的OO语言的目的
在一堆样板文件中包装每个路径定义,以反序列化/序列化请求和响应对象,并调用处理程序方法。
我已经写了一些东西来减少样板量,所以你可以这样写:
public void Routes() {
post("/happy/birthday", (request, response) -> {
return callJson(getHandler("birthday"), request, response);
});
}
哪个不好,但需要反思来查找生日方法,因此没有生日处理程序方法存在的编译时验证。但感觉应该有更好的方法。
答案 0 :(得分:0)
可能会误解某些内容,但Spark Java只是Java,因此您可以使用任何Java序列化库。我已经将Gson与Spark一起使用了。
Gson gson = new Gson();
post("/employee", (request, response) -> {
ValidateNewEmployeeCommand command = new ValidateNewEmployeeCommand();
Employee emp = gson.fromJson(request.body(), Employee.class);
return command.validateEmployee(emp);
}, gson::toJson);
答案 1 :(得分:0)
Livy(Apache许可证)是一项服务,它使远程应用程序能够通过REST API轻松地与Spark群集进行交互。它可以通过简单的REST接口或RPC客户端库轻松提交Spark作业或Spark代码片段,同步或异步结果检索以及SparkContext管理。 Livy还简化了Spark与应用服务器之间的交互,简化了交互式Web /移动应用程序所需的架构。
使用Livy,您还可以:
多个客户端使用长时间运行的SparkContexts进行多个Spark作业
同时管理多个SparkContexts,并在集群(YARN / Mesos)而不是Livy Server上运行它们,以获得良好的容错性和并发性
将作业提交为预编译的jar,代码片段或通过Java / Scala客户端API
通过安全的身份验证通信(正在进行的工作)确保安全性
要使用Livy,必须在服务器上安装Spark(1.4或更高版本; Scala 2.10版本)。要开始使用download/install packages from here,然后执行以下操作:
答案 2 :(得分:0)
看起来没有办法实现我的目标,但我们已经制定了一些能够为我们完成工作的实用工具,并允许我们按照它们在Dropwizard中定义的方式定义路径。我们将看看我们是否可以开源。