试图使用ring.middleware.json-params与compojure

时间:2013-03-10 02:30:30

标签: clojure leiningen compojure ring

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

按照

中的说明,我开始使用compojure没有任何问题
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)

由于我是工具链的总菜刀,我不知道如何设置或检查类路径或找出leiningen存放json_params的位置,或者甚至不知道如何查看类文件到找出这个名字应该是什么。

除了针对这个问题的特定解决方案之外,我还要感谢指向新手的东西,所以也许我可以在将来自己解决这样的直接问题。

1 个答案:

答案 0 :(得分:1)

启动服务器时是否收到错误?我的环境没有任何问题。 enter image description here

这就是我所做的:

lein new compojure hello

然后像你一样改变project.clj并运行:

lein deps

最后添加:

(:use ring.middleware.json-params)

to handle.clj

启动服务器,不会发生错误。

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