我想使用Maven在Eclipse中启动Spark项目.我安装了m2eclipse,我在Maven项目中有一个工作的HelloWorld Java应用程序.
我想使用Spark框架,我正在遵循官方网站的指示.我已将Spark存储库添加到我的pom.xml:
<repository>
<id>Spark repository</id>
<url>http://www.sparkjava.com/nexus/content/repositories/spark/</url>
</repository>
Run Code Online (Sandbox Code Playgroud)
然后依赖:
<dependency>
<groupId>spark</groupId>
<artifactId>spark</artifactId>
<version>0.9.9.4-SNAPSHOT</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
但我在Eclipse中遇到错误:
Missing artifact spark:spark:jar:0.9.9.4-SNAPSHOT
Run Code Online (Sandbox Code Playgroud)
我该如何解决这个问题?我不想下载Spark的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>com.myproject</groupId>
<artifactId>Spark1</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>Spark1</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<repository>
<id>Spark repository</id>
<url>http://www.sparkjava.com/nexus/content/repositories/spark/</url>
</repository>
<dependencies>
<!-- (...) -->
<dependency>
<groupId>spark</groupId>
<artifactId>spark</artifactId>
<version>0.9.9.4-SNAPSHOT</version>
</dependency>
</dependencies>
</project>
Run Code Online (Sandbox Code Playgroud) 我从春天迁移到火花前,现在我陷入了基本的困境.
当我发出POST请求在正文中发送数据时,我希望将JAVA对象放回控制器中.
在春天我曾经做过
@RequestBody User user
Run Code Online (Sandbox Code Playgroud)
它被自动"填充"了..
现在有火花我有方法:
request.body();
Run Code Online (Sandbox Code Playgroud)
但是这给了我一个像这样的序列化字符串:
id=7&name=Pablo+Mat%C3%ADas&lastname=Gomez&githubUsername=pablomatiasgomez
那么我怎样才能获得用户DTO?
当然,User类具有属性
我正在使用Spark Web框架并创建RESTful API.(http://sparkjava.com因为有很多东西叫做"Spark")
我的雇主的标准要求我们编写一系列单元测试,每天自动运行一次,以确认应用程序仍在运行.
Spark很容易使用像Postman这样的工具来测试自己,但是我没有找到任何JUnit使用Spark编写测试的好例子,甚至没有使用它以编程方式编写HTTP请求.
有没有人这样做过?可能吗?
在.NET工作之后,我非常精通NancyFX和Web API等微型Web框架对IoC容器的支持.
在像Sinatra这样的Ruby类似框架中(NancyFX基于Sinatra),似乎你有依赖注入的能力.
从我看到的,因为Java spark应用程序作为主要方法运行,似乎你不能传入依赖项或IoC容器.
public class HelloWorld {
public static void main(String[] args) {
get("/hello", (req, res) -> "Hello World");
}
}
Run Code Online (Sandbox Code Playgroud)
我很难理解这样的框架在没有支持的情况下如何有用.
如果这个框架没有,那么是否有另一个轻量级框架(Spring不是我记忆中的轻量级框架,但可能已经发生了变化),它确实支持这个吗?
我在Spark应用程序中为静态文件指定了一个位置:
Spark.staticFileLocation("/public")
Run Code Online (Sandbox Code Playgroud)
现在我想为某些文件添加一个过滤器(例如出于安全目的),但它不起作用:
Spark.before("/admin.html", myFilter);
Run Code Online (Sandbox Code Playgroud)
但是,对于非静态映射,它确实有效.是否可以为静态文件配置这样的过滤器?
换句话说,Spark保护静态文件(如管理页面的模板)在没有身份验证的情况下暴露的最佳做法是什么?
我遇到了一个很好的Java小型Web请求框架:Spark.API看起来不错,很有希望,但是库包本身很奇怪.不要理会它建议使用快照工件作为依赖项.单独留下它使用log4j进行日志记录(库现在倾向于使用jcl或slf4j)和System.out.println的事实.但它将自己的log4j.properties捆绑在spark-xxx.jar中.我花了一个小时来调查为什么当我的类路径中存在log4j.properties时,我的项目会抱怨log4j配置.-Dlog4j.debug = true给出了答案,log4j承认它已经从spark jar加载了log4j.properties.
我想知道这个(作为一个库并使用log4j和捆绑log4j.properties)是否有一些动机,或者它是否只是蹩脚.
我正在玩Spark(Java Web框架,而不是Apache Spark).
我觉得定义路由和过滤器真的很好很容易,但是我希望在我的路由中应用本机servlet过滤器,似乎无法找到一种方法.
更具体地说,我想使用Jetty的DoSFilter,它是一个servlet过滤器(与Spark Filter定义形成对比).由于Spark使用嵌入式Jetty,我没有web.xml来注册DoSFilter.但是,Spark不会公开服务器实例,所以我找不到以编程方式注册过滤器的优雅方式.
有没有办法将本机servlet过滤器应用于我的路由?
我想把DoSFilter包装在我自己的Spark Filter中,但这似乎是一个奇怪的想法.
我想做点什么来用spark + java + hibernate + postgres注册用户
这是我的代码:
post("/registrar", (request, response) -> {
EntityManagerFactory emf = Persistence.
createEntityManagerFactory("compradorcitoPU");
EntityManager em = emf.createEntityManager();em.getTransaction().begin();
em.persist(u);
em.getTransaction().commit();
em.close(); return null; });
Run Code Online (Sandbox Code Playgroud)
但是这个错误出现了:
INFO spark.webserver.MatcherFilter - 请求的路径[/ registrarnull]尚未在Spark中映射
我正在使用以下类从Spark编码器创建bean
Class OuterClass implements Serializable {
int id;
ArrayList<InnerClass> listofInner;
public int getId() {
return id;
}
public void setId (int num) {
this.id = num;
}
public ArrayList<InnerClass> getListofInner() {
return listofInner;
}
public void setListofInner(ArrayList<InnerClass> list) {
this.listofInner = list;
}
}
public static class InnerClass implements Serializable {
String streetno;
public void setStreetno(String streetno) {
this.streetno= streetno;
}
public String getStreetno() {
return streetno;
}
}
Encoder<OuterClass> outerClassEncoder = Encoders.bean(OuterClass.class);
Dataset<OuterClass> ds = spark.createDataset(Collections.singeltonList(outerclassList), outerClassEncoder)
Run Code Online (Sandbox Code Playgroud)
我收到以下错误
Exception …Run Code Online (Sandbox Code Playgroud) 假设我有以下Java代码.
get("/", (request, response) -> {
Map<String, Object> attributes = new HashMap<>();
//attributes.put("message", "Hello World!");
return new ModelAndView(attributes, "index.ftl");
}, new FreeMarkerEngine());
Run Code Online (Sandbox Code Playgroud)
那是来自Spark.当我导航到localhost:portnumber /时,我看到index.ftl呈现,我们假设(此处未编码)显示此应用程序的数据库中的数据.但是,我想说我想动态更新index.ftl.假设另一个用户从另一个应用程序实例更新了数据库(此处未编码),我想在第一个用户的页面上显示index.ftl中的新更改.如何在不重新渲染页面的情况下完成这项工作?
你不能只是在Java端有一个定时器,每10-20毫秒就会接收一次新数据.这也将大大浪费连接时间.是否可以以某种方式更新Java代码以更新数据库?像数据库的监听器?
这不仅是一个问题,而且您如何能够将新接收的数据推送到index.ftl而无需重新渲染?
spark-java ×10
java ×8
apache-spark ×1
eclipse ×1
freemarker ×1
hibernate ×1
junit ×1
log4j ×1
logging ×1
maven ×1
persistence ×1
postgresql ×1
servlets ×1
spring ×1
unit-testing ×1