代码之家  ›  专栏  ›  技术社区  ›  Reb.Cabin

尝试将ring.middleware.json与compjure一起使用

  •  3
  • Reb.Cabin  · 技术社区  · 11 年前

    我是Clojure、leiningen和java工具链的新手(但不是lisp、函数式编程和一般软件)。我正在尝试在Composjure中引导一些RESTful web服务。

    我很容易就开始了compjure,遵循了

    https://github.com/weavejester/compojure/wiki/Getting-Started
    

    我现在正在努力 递增地 来自现已过时的网站的加载项功能

    http://mmcgrana.github.com/2010/08/clojure-rest-api.html
    

    从工作开始 leiningen 来自上面第一个链接的项目(它通过 lein ring start ,我在project.clj中添加了一行

    (defproject hello-world "0.1.0-SNAPSHOT"
      :description "FIXME: write description"
      :url "http://example.com/FIXME"
      :dependencies [[org.clojure/clojure "1.4.0"]
                     [ring-json-params "0.1.3"]  ;;; <---===/// Here's the line I added
                     [compojure "1.1.5"]]
      :plugins [[lein-ring "0.8.2"]]
      :ring {:handler hello-world.handler/app}
      :profiles
      {:dev {:dependencies [[ring-mock "0.1.3"]]}})
    

    然后我重新运行 lein deps 还有一堆下载的东西。一切都很好,这个项目仍然有效。现在我添加一行到 handler.clj :

    (ns hello-world.handler
      (:use     compojure.core)
      (:use     ring.middleware.json-params)  ;;; <---===/// Here's the line I added
      (:require [compojure.handler :as handler]
                [compojure.route :as route]))
    
    (defroutes app-routes
      (GET "/" [] "Hello World")
      (route/not-found "Not Found"))
    
    (def app
      (handler/site app-routes))
    

    现在我明白了

    java.io.FileNotFoundException: Could not locate ring/middleware/json_params__init.class or ring/middleware/json_params.clj on classpath: 
     at clojure.lang.RT.load (RT.java:432)
        clojure.lang.RT.load (RT.java:400)
        clojure.core$load$fn__4890.invoke (core.clj:5415)
        clojure.core$load.doInvoke (core.clj:5414)
    

    由于我完全不了解工具链,我不知道如何设置或检查类路径,也不知道在哪里 json_params 是由莱宁根存放的,甚至是如何查看类文件内部以找出该名称。

    除了这个问题的具体解决方案外,我还希望能为新手提供一些建议,这样我将来就可以自己解决这样简单的问题了。

    1 回复  |  直到 11 年前
        1
  •  1
  •   yeh    11 年前

    启动服务器时出现错误了吗?我的环境没有问题。 enter image description here

    以下是我所做的:

    lein new compojure hello
    

    然后像您所做的那样更改project.clj并运行:

    lein deps
    

    最后添加:

    (:use ring.middleware.json-params)
    

    处理.clj

    启动服务器,没有发生错误。

    我建议你建立一个新项目,然后再试一次。