标签: spark-java

Java Spark 中的 `:path-param` 和 `{path-param}` 有什么区别?

我正在使用 Java Spark 构建 REST 服务器,我想知道以下两种用于定义路径参数的语法之间的区别,使用:path-parametervs {path-parameter}

path("/containers/:container-id", () -> { ...} )

path("/shipments/{shipment-id}", () -> { ... } )
Run Code Online (Sandbox Code Playgroud)

有一次,当查询路径上的路径参数/{handler-id}(嵌套在/v1和 中/handlers)时,我不得不将语法从:表单更改为{}表单,以使 Sparknull在查询handler-id.

那么这两种语法有什么区别呢?

java url-routing spark-java

4
推荐指数
1
解决办法
1961
查看次数

尝试设置 Spark REST 示例时出错

我正在尝试设置简单的 Spark REST 示例,如下所述: http: //sparkjava.com/documentation.html

当我浏览到: http://localhost:4567/hello

我收到此错误:

[qtp346024113-15] WARN org.eclipse.jetty.server.HttpChannel - //localhost:4567/hello
java.lang.NoSuchMethodError:       javax.servlet.http.HttpServletResponse.getHeaders(Ljava/lang/String;)Ljava/util/Collection;
at spark.utils.GzipUtils.checkAndWrap(GzipUtils.java:64)
at spark.webserver.MatcherFilter.doFilter(MatcherFilter.java:251)
at spark.webserver.JettyHandler.doHandle(JettyHandler.java:61)
at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:189)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:119)
at org.eclipse.jetty.server.Server.handle(Server.java:517)
at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:308)
at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:242)
at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:261)
at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:95)
at org.eclipse.jetty.io.SelectChannelEndPoint$2.run(SelectChannelEndPoint.java:75)
at org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.produceAndRun(ExecuteProduceConsume.java:213)
at org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.run(ExecuteProduceConsume.java:147)
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:654)
at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:572)
at java.lang.Thread.run(Thread.java:745)
Run Code Online (Sandbox Code Playgroud)

看起来类路径有问题,但我不知道缺少哪些依赖项。

我的 Spark 的 pom.xml 中的依赖项如下:

 <dependency>
        <groupId>org.eclipse.jetty</groupId>
        <artifactId>jetty-server</artifactId>
        <version>9.3.6.v20151106</version>
    </dependency>


  <dependency>
        <groupId>org.eclipse.jetty</groupId>
        <artifactId>jetty-http</artifactId>
        <version>9.3.6.v20151106</version>
    </dependency>

  <dependency>
        <groupId>org.eclipse.jetty</groupId>
        <artifactId>jetty-util</artifactId>
        <version>9.3.6.v20151106</version>
    </dependency>
  <dependency>
        <groupId>org.eclipse.jetty</groupId>
        <artifactId>jetty-io</artifactId>
        <version>9.3.6.v20151106</version>
    </dependency>
    <dependency>
        <groupId>org.eclipse.jetty.websocket</groupId>
        <artifactId>websocket-server</artifactId>
        <version>9.3.3.v20150827</version> …
Run Code Online (Sandbox Code Playgroud)

java rest spark-java

3
推荐指数
1
解决办法
2303
查看次数

单元测试Java Spark微框架

我正在尝试为java微服务添加一个restful api.为此,我使用spark:

http://sparkjava.com/documentation.html

我创建了一个非常简单的类,它代表了api.那堂课在这里:

public class Routes {
    public void establishRoutes(){
        get("/test", (req, res) -> "Hello World");
        after((req, res) -> {
            res.type("application/json");
        });

        exception(IllegalArgumentException.class, (e, req, res) -> {
            res.status(400);
        });
    }
Run Code Online (Sandbox Code Playgroud)

现在,运行Routes.establishRoutes()应该站起来,如果有人决定访问http:// localhost:4567/test,它将显示"Hello World" .这确实有效.欢呼!

下一步是对代码进行单元测试.不幸的是,我的单元测试没有成功.spark文档没有详细说明进行测试的合理方式,因此我所拥有的内容是根据我在网络上找到的示例拼凑而成的.这是我的Junit测试:

public class TestRoutes {
        @Before
        public void setUp() throws Exception {
            Routes newRoutes = new Routes();
            newRoutes.establishRoutes();
        }

        @After
        public void tearDown() throws Exception {
            stop();
        }

        @Test
        public void testModelObjectsPOST(){

            String testUrl = "/test";


            ApiTestUtils.TestResponse res = ApiTestUtils.request("GET", testUrl, null); …
Run Code Online (Sandbox Code Playgroud)

java rest junit unit-testing spark-java

3
推荐指数
1
解决办法
4024
查看次数

如何制作一个胖罐?

使用SpringBoot,您可以获得@SpringBootApplication注释,但与纯Java Java框架相同的是什么?

IntelliJ创建了一个Maven项目,我添加了spark依赖项,但是运行安装目标,我获得了一个没有清单的5 KB jar.不是可执行的jar.

所述pom.xml创建迄今如下:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>sparkdemo</groupId>
  <artifactId>sparkdemo</artifactId>
  <version>1.0 </version>
  <packaging>jar</packaging>

  <name>sparkdemo</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>com.sparkjava</groupId>
      <artifactId>spark-core</artifactId>
      <version>2.5.4</version>
    </dependency>
  </dependencies>

  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.3</version>
        <configuration>
          <source>${java.version}</source>
          <target>${java.version}</target>
          <optimize>true</optimize>
          <debug>true</debug>
        </configuration>
      </plugin>
    </plugins>
  </build>

</project>
Run Code Online (Sandbox Code Playgroud)

非常感谢任何建议....谢谢!

java jar intellij-idea maven spark-java

3
推荐指数
1
解决办法
6041
查看次数

SparkJava 变量范围

我正在开发一个 SparkJava(不是 Apache Spark)应用程序,我想在前置过滤器和后置路由之间共享一个对象。过滤器和路由在不同的类中定义。我不愿意继续使用会话,因为它是一个移动应用程序 json api,从理论上讲,它应该是无会话的。变量范围应该是从请求处理开始到结束。

    before(Main.API_PROTECTED + "/*", (req, res) -> {
        String token = req.headers("Authorization");
        if (token == null | "".equals(token)) {
            halt(401, "You're not welcome.");
        } else {
            Partner partner = new PartnerDAO().getPartnerByToken(token.replace("Bearer ", ""));
            if (partner == null) {
                halt(401, "You're not welcome.");
            }
        }
    });
Run Code Online (Sandbox Code Playgroud)

有上面的 before 过滤器,我想从中与下面的 post 路由共享合作伙伴对象:

        post(Main.API_PROTECTED + "/vendors",
            (req, res) -> {
                // Do stuff to insert Vendors in the Database, verifying access control using the partner object
                return ""; …
Run Code Online (Sandbox Code Playgroud)

spark-java

2
推荐指数
1
解决办法
954
查看次数

如何使用spark java从POST表单获取数据?

我对所有这些事情都很陌生,但希望你们能帮我理解它是如何运作的.我有一个带字段的表格.我如何从客户端获取数据?正在寻找一些信息,但无法找到.

<form action="/login" method="POST">
    <fieldset>
        <legend>MemberId</legend>
        <div class="form-group">
            <div class="row colbox">
                <div class="col-lg-4 col-sm-4">
                    <label for="txt_memberid" class="control-label">MemberId</label>
                </div>
                <div class="col-lg-8 col-sm-8">
                    <input class="form-control" id="txt_memberid" name="txt_memberid" placeholder="MemberId" type="text" value="" />
                    <span class="text-danger"></span>
                </div>
            </div>
        </div>

        <legend>Login</legend>
        <div class="form-group">
            <div class="row colbox">
                <div class="col-lg-4 col-sm-4">
                    <label for="txt_username" class="control-label">Username</label>
                </div>
                <div class="col-lg-8 col-sm-8">
                    <input class="form-control" id="txt_username" name="txt_username" placeholder="Username" type="text" value="" />
                    <span class="text-danger"></span>
                </div>
            </div>
        </div>

        <div class="form-group">
            <div class="row colbox">
                <div class="col-lg-4 col-sm-4">
                    <label for="txt_password" class="control-label">Password</label>
                </div>
                <div class="col-lg-8 col-sm-8">
                    <input class="form-control" …
Run Code Online (Sandbox Code Playgroud)

spark-java

2
推荐指数
1
解决办法
8574
查看次数

从Kotlin中的lambda表达式中明确返回

使用Spark,我最终得到了一些像这样的代码:

post("/auth/login", { req, res ->
    val body = parseBody(req.body())
    val assertion = body["assertion"]
    if (assertion == null) {
        halt(400)
        return null
    }
    // ...snip...lots more code
})
Run Code Online (Sandbox Code Playgroud)

哪个很好用,除了......它不能编译 - 我明白了'return' is not allowed here.

可以将lambda的剩余部分放在一个else块中,但我宁愿不想最大限度地减少压痕.

那么如何"短路"lambda以返回null?

kotlin spark-java

2
推荐指数
1
解决办法
1347
查看次数

Spark CORS访问控制允许起源错误

我在客户端使用Java和Angular 1的Spark。将请求发送到服务器时,我不断收到此“ -1”错误。错误是“所请求的资源上没有'Access-control-allow-origin'标头。因此,不允许访问源' http:// localhost:4567 '。”

我知道这是一个CORS问题,因此我添加了标头'Access-Control-Allow-Origin':'*'并将其也添加到服务器端的响应中。不幸的是,这似乎无法解决我的问题。

需要您的帮助,谢谢!

http httprequest cors spark-java

2
推荐指数
2
解决办法
3555
查看次数

Java Spark Framework:使用直接HTML模板

使用直接HTML页面作为Spark模板的最简单方法是什么(IE,我不想通过TemplateEngine实现).

我可以使用模板引擎,如下所示:

Spark.get("/test", (req, res) -> new ModelAndView(map, "template.html"), new MustacheTemplateEngine());
Run Code Online (Sandbox Code Playgroud)

我尝试使用没有引擎的ModelAndView:

Spark.get("/", (req, res) -> new ModelAndView(new HashMap(), "index.html"));
Run Code Online (Sandbox Code Playgroud)

但是,得到的只是我的模型和视图的toString()方法:spark.ModelAndView@3bdadfd8.

我正在考虑编写自己的引擎并实现render()来执行IO来提供html文件,但是有更好的方法吗?

java spark-java

1
推荐指数
2
解决办法
4315
查看次数

从Spark 2.0中的列表创建JavaRDD

从列表中创建JavaRDD的常用方法是使用 JavaSparkContext.parallelize(List)

但是,Spark 2.0 SparkSession用作入口点,我不知道如何从List创建JavaRDD

spark-java

1
推荐指数
1
解决办法
3001
查看次数

Spark无法绑定http端口

我正在尝试将端口80绑定到我的Spark服务器:

import static spark.Spark.get;
import static spark.Spark.port;

public class Main {

    public static void main(String[] args) {
        port(80);
        get("/hello", (request, response) -> "hello world");
    }
}
Run Code Online (Sandbox Code Playgroud)

但由于某种原因,我收到以下错误:

22:51:56.067 [Thread-0] ERROR spark.Spark - ignite failed
java.net.SocketException: Permission denied
    at sun.nio.ch.Net.bind0(Native Method)
    at sun.nio.ch.Net.bind(Net.java:433)
    at sun.nio.ch.Net.bind(Net.java:425)
    at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:223)
    at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:74)
    at org.eclipse.jetty.server.ServerConnector.open(ServerConnector.java:298)
    at org.eclipse.jetty.server.AbstractNetworkConnector.doStart(AbstractNetworkConnector.java:80)
    at org.eclipse.jetty.server.ServerConnector.doStart(ServerConnector.java:236)
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68)
    at org.eclipse.jetty.server.Server.doStart(Server.java:431)
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68)
    at spark.embeddedserver.jetty.EmbeddedJettyServer.ignite(EmbeddedJettyServer.java:149)
    at spark.Service.lambda$init$2(Service.java:496)
    at java.lang.Thread.run(Thread.java:748)
Run Code Online (Sandbox Code Playgroud)

我在我OS的任何地方搜索,如果有任何连接绑定到端口80,但我没有找到.
有什么解决方案吗?

java spark-java

1
推荐指数
1
解决办法
526
查看次数

通过 Bazel 使用 Spark 库出现 ClassNotFoundException

我正在尝试在 Spark 中使用 Bazel 构建它来运行“hello world”服务器,但我收到此错误:

$ bazel run //:app
INFO: Analysed target //:app (0 packages loaded).
INFO: Found 1 target...
Target //:app up-to-date:
  bazel-bin/app.jar
  bazel-bin/app
INFO: Elapsed time: 0.201s, Critical Path: 0.00s
INFO: 0 processes.
INFO: Build completed successfully, 1 total action
INFO: Build completed successfully, 1 total action
Exception in thread "main" java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory
        at spark.Service.<clinit>(Service.java:56)
        at spark.Spark$SingletonHolder.<clinit>(Spark.java:51)
        at spark.Spark.getInstance(Spark.java:55)
        at spark.Spark.<clinit>(Spark.java:61)
        at io.app.server.Main.main(Main.java:7)
Caused by: java.lang.ClassNotFoundException: org.slf4j.LoggerFactory
        at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:338)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
        ... 5 …
Run Code Online (Sandbox Code Playgroud)

spark-java bazel

1
推荐指数
1
解决办法
929
查看次数

Spark 框架和相对路径

我正在使用Spark 框架创建一个 Web 应用程序,并且我一直在浏览他们网站上的教程。目前,我正在处理他们的模板部分,但是我似乎无法让项目识别出我的 css 和我的模板在我的资源文件夹中。

我正在使用 Netbeans 和 Maven 来管理我的依赖项。

谁能帮我弄清楚如何在这种环境中适当地设置我的相对路径/创建我的项目文件夹?我是 Maven 和 Spark 的新手,所以请放轻松。

java netbeans relative-path maven spark-java

0
推荐指数
1
解决办法
1890
查看次数