请求的路由尚未映射到Spark中

时间:2015-09-18 03:44:47

标签: java hibernate postgresql persistence spark-java

我想用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; });

但出现此错误:

  

INFO spark.webserver.MatcherFilter - 请求的路线   [/ registrarnull]尚未在Spark中映射

4 个答案:

答案 0 :(得分:8)

我有类似的问题。我要归还的物品很大,我想把它们写出来。所以,我的软件看起来像这样:

    post("/apiserver", "application/json", (request, response) -> {
        log.info("Received request from " + request.raw().getRemoteAddr());
        ServerHandler handler = new ServerHandler();
        return handler.handleRequest(request, response);
    });

在我的处理程序中,我获得了原始的HttpResponse对象,打开了它的OutputStream并像这样写了它:

    ObjectMapper mapper = new ObjectMapper();
    mapper.writeValue(response.raw().getOutputStream(), records);

因为我知道我已经在OutputStream上写了调用者当时要求的内容(或错误),我想我可以返回null。我的程序运行正常。 Spark会按预期将请求路由到我的处理程序。而且,由于我正在编写原始OutputStream,因此我回到了客户端的预期。但是,我一直在服务器日志中看到消息“/ apiserver route not defined”。

在查看Spark文档时,它说:

  

Spark应用程序的主要构建块是一组路由。路线由三个简单的部分组成:

     

动词(get,post,put,delete,head,trace,connect,options)

     

路径(/ hello,/ users /:name)

     

回调(请求,响应) - > {}

显然,Spark不知道你在原始HttpResponse上写了什么,作为一个web服务器,你应该向调用者提供一些响应。因此,如果您的响应为空,则表示您尚未满足提供回调的要求,并且您会收到错误,即即使Spark按预期行为也没有找到映射。只需返回一个响应(null不是响应,“200 OK”就是),错误就会消失。

[编辑]拼写和语法。

答案 1 :(得分:3)

不要“返回null”而是返回空字符串或其他东西

答案 2 :(得分:2)

正如此issue的注释中所解释的,SparkJava认为返回null意味着路由尚未映射,因此它会记录错误消息并回复404状态的响应。

要避免此类行为,您必须返回一个String(可能为空)。 错误消息将消失,并且将回复String作为正文和200状态的响应。

答案 3 :(得分:1)

在我的情况下,我必须实施选项请求以取悦预检CORS检查:

    options("/*", (request,response)->{
        String accessControlRequestHeaders = request.headers("Access-Control-Request-Headers");
        if (accessControlRequestHeaders != null) {
            response.header("Access-Control-Allow-Headers", accessControlRequestHeaders);
        }
        String accessControlRequestMethod = request.headers("Access-Control-Request-Method");
        if(accessControlRequestMethod != null){
            response.header("Access-Control-Allow-Methods", accessControlRequestMethod);
        }

        return "OK";
    });