我声明了路径/ api。当前有1条路线/人(获取)。到目前为止,如果我尝试获取/ api /无论那个不是人的东西,服务器都会返回404,这恰好是您期望的。 但是,我添加了一个after过滤器,现在对于不存在的路由,它系统地返回200。
删除after过滤器,它可以正常工作。重要的是要知道,尽管after修改了响应的主体,但它在修改状态方面几乎没有进展。
请参阅下面的最小可重复示例。在示例中,我只向主体添加了一个空的JSON对象,但是,在真正的应用程序中,我当然正在做其他事情,但没有修改状态代码。
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import org.slf4j.LoggerFactory;
import spark.Request;
import spark.Response;
import spark.Route;
import spark.servlet.SparkApplication;
import static spark.Spark.*;
public class Server implements SparkApplication {
private static org.slf4j.Logger LOGGER = LoggerFactory.getLogger(Server.class);
public static void main(String[] args) {
new Server().init();
}
@Override
public void init() {
before("*", (request, response) -> {
LOGGER.info("Request: " + request.url());
});
after((request, response) -> {
response.type("application/json");
response.header("Content-Encoding", "gzip");
});
/**
* Let's declare routes
*/
get("/ping", Server.ping);
path("/api", () -> {
//add query information to response object
after("/*", (Request request, Response response) -> {
Gson gson = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create();
JsonObject body;
if (response.body() != null) {
body = new JsonParser().parse(response.body()).getAsJsonObject();
} else {
body = new JsonObject();
}
response.body(body.toString());
});
get("/person", Server.ping);
});
public static Route ping = (Request req, Response res) -> {
res.status(200);
return "Alive.";
};
}
如果您在/ api中取消声明after过滤器,则一切正常,只有/ api / person会返回200。我希望使用该过滤器,如果路由不存在,则状态为404。
答案 0 :(得分:0)
代替使用
after("/*", (Request request, Response response) -> {
Gson gson = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create();
JsonObject body;
if (response.body() != null) {
body = new JsonParser().parse(response.body()).getAsJsonObject();
} else {
body = new JsonObject();
}
response.body(body.toString());
});
在过滤器中删除通配符。
after("/", (Request request, Response response) -> {
Gson gson = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create();
JsonObject body;
if (response.body() != null) {
body = new JsonParser().parse(response.body()).getAsJsonObject();
} else {
body = new JsonObject();
}
response.body(body.toString());
});