获取以下异常:线程"main"中的异常java.lang.UnsupportedClassVersionError:spark/Route:不支持的major.minor版本52.0
尝试使用spark Web应用程序框架,当我执行文件时,它会抛出此异常.
Spark Framework版本:2.0.0
我想为文件下载编写简单的rest api.
我无法找到有关它的文档,因为我知道我需要设置mimetype='application/zip'响应,但不清楚如何返回流.
更新:这里解决了示例代码:
public static void main(String[] args) {
//setPort(8080);
get("/hello", (request, responce) -> getFile(request,responce));
}
private static Object getFile(Request request, Response responce) {
File file = new File("MYFILE");
responce.raw().setContentType("application/octet-stream");
responce.raw().setHeader("Content-Disposition","attachment; filename="+file.getName()+".zip");
try {
try(ZipOutputStream zipOutputStream = new ZipOutputStream(new BufferedOutputStream(responce.raw().getOutputStream()));
BufferedInputStream bufferedInputStream = new BufferedInputStream(new FileInputStream(file)))
{
ZipEntry zipEntry = new ZipEntry(file.getName());
zipOutputStream.putNextEntry(zipEntry);
byte[] buffer = new byte[1024];
int len;
while ((len = bufferedInputStream.read(buffer)) > 0) {
zipOutputStream.write(buffer,0,len);
}
}
} catch (Exception e) {
halt(405,"server …Run Code Online (Sandbox Code Playgroud) 我正在掌握Spark框架,并且我正在尝试理解以多种路径的统一方式处理异常的最佳方法.
目前我有许多路由,它们都按以下方式处理异常:
...
catch (final Exception e) {
...
response.status(418);
return e.getMessage();
}
...
Run Code Online (Sandbox Code Playgroud)
这留下了很多不足之处,主要是异常逻辑在它们之间重复.我知道它可以通过重构来改进,但我想知道是否有类似于Spring中的ExceptionHandler机制,您可以在抛出特定异常时执行操作,例如:
@ExceptionHandler(Exception.class)
public void handleException(final Exception e, final HttpServletRequest request) {
...executed for the matching exception...
}
Run Code Online (Sandbox Code Playgroud)
那么,是否存在用于异常处理的Spark-esque机制?我查了一下文档并做了简短的介绍.如果没有,我将继续我的重构计划.谢谢.
我正在尝试制作一个与以下网址匹配的过滤器:
/foo 和 /foo/*
所以任何事情都在/foo/基础情况下/foo
我有这个过滤器:
Spark.before("/foo/*", (request, response) -> {
String ticket = request.cookie("session");
if (ticket == null) {
Spark.halt(302);
}
});
Run Code Online (Sandbox Code Playgroud)
但是当我进入时,这当然不会执行 /foo
我尝试了以下但没有运气:
/foo*
/foo.*
/foo/
反正有没有实现这个目标?或者也许使用URL列表?这样我就可以将两个url分配给同一个过滤器.
并且请不要说将函数存储在变量中,以便我使用它两次,因为我觉得它根本不干净..
我有这个:
get ("/test", (req, resp) -> {
return repository.getAll();
}, new JsonTransformer());
Run Code Online (Sandbox Code Playgroud)
我的变压器看起来像:
public class JsonTransformer implements ResponseTransformer {
ObjectMapper om = new ObjectMapper();
public JsonTransformer() {
}
@Override
public String render(Object o) throws Exception {
return om.writeValueAsString(o);
}
}
Run Code Online (Sandbox Code Playgroud)
我尝试在响应中使用标题函数添加标题,如下所示:
get ("/test", (req, resp) -> {
resp.header("Content-Type", "application/json");
return repository.getAll();
}, new JsonTransformer());
Run Code Online (Sandbox Code Playgroud)
我尝试过在文档中找到的内容:我认为这会设置接受类型
get ("/test", "application/json", (req, resp) -> {
return repository.getAll();
}, new JsonTransformer());
Run Code Online (Sandbox Code Playgroud)
但无处我得到application/json我的Content-Type头
我使用的Spark服务网页.对于静态文件我初始化星火喜欢这里所说:
所以我有这个结构:
/src/main/resources/public/
|-- foo/
|-- css/
| |-- bootstrap.css
|-- js/
| ...
|-- img/
...
Run Code Online (Sandbox Code Playgroud)
我制作了一个foo文件夹,因为我的网页位于/foourl ..这样:
http://www.example.com/foo/index
所以我的静态文件像这样加载,例如:
http://www.example.com/foo/css/bootstrap.css
我现在想要的是将此路径变量.因为我有不同的环境,例如,如果我在另一个域中部署此应用程序,我希望它是:
http://www.example2.com/superfoo/css/bootstrap.css
但为此,我必须更改版本并更改文件夹...
对于控制器我很容易做到:
例:
Spark.get(this.appBasePath + "/users", (request, response) -> {
return this.getUsersView(request);
}, new FreeMarkerEngine());
Run Code Online (Sandbox Code Playgroud)
this.appBasePath 来自加载决定环境的配置.
所以我要问的是以编程方式设置静态文件URL而不制作任何文件夹.有没有办法实现这个目标?
一个带火花的问候世界:
get(new Route("/hello") {
@Override
public Object handle(Request request, Response response) {
response.type("text/html");
return "<h1>Hello Spark MVC Framework!</h1>";
}
});
Run Code Online (Sandbox Code Playgroud)
如何返回静态文件index.html?
笔记:
有没有办法在同一个JVM中运行多个Sparkjava服务器实例?我在"插件"软件中使用它,并根据外部环境启动我的插件的多个实例,然后导致
java.lang.IllegalStateException: This must be done before route mapping has begun
at spark.SparkBase.throwBeforeRouteMappingException(SparkBase.java:256)
at spark.SparkBase.port(SparkBase.java:101)
at com.foo.bar.a(SourceFile:59)
Run Code Online (Sandbox Code Playgroud)
在我看来,通过查看它是围绕代码中的静态字段构建的代码,所以我正在考虑类加载器技巧或以SparkServerFactory某种方式消除SparkBase.
不,不是Apache Spark.我发现Sparkjava是最简单的API方法,也是我点击次数最多的方法,但是每个人都说它不应该用于制作,但没有人给我一个很好的答案.你们有没有人知道任何不稳定或安全漏洞或其他什么?
我在Spark应用程序中为静态文件指定了一个位置:
Spark.staticFileLocation("/public")
Run Code Online (Sandbox Code Playgroud)
现在我想为某些文件添加一个过滤器(例如出于安全目的),但它不起作用:
Spark.before("/admin.html", myFilter);
Run Code Online (Sandbox Code Playgroud)
但是,对于非静态映射,它确实有效.是否可以为静态文件配置这样的过滤器?
换句话说,Spark保护静态文件(如管理页面的模板)在没有身份验证的情况下暴露的最佳做法是什么?