2013-03-10 99 views
3

我是Clojure,leiningen和java工具鏈的新手(但不是爲了解釋,函數式編程,一般的軟件)。我試圖在Compojure中引導一些RESTful Web服務。試圖使用ring.middleware.json-params與compojure

我毫不費力就開始使用的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) 

因爲我是一個總的小白到工具鏈,我不知道如何設置或檢查類路徑或找出其中json_params是由leiningen存放的,甚至是如何查看類文件以找出名稱應該是什麼。

除了針對這個問題的具體解決方案之外,我會很感謝指向新手的東西,所以也許我可以在將來自己解決這些直接的問題。

回答

1

您在啓動服務器時是否收到該錯誤?我的環境沒有錯。 enter image description here

這裏是我做了什麼:

lein new compojure hello 

你做然後改變project.clj並運行:

lein deps 

最後加:

(:use ring.middleware.json-params) 

處理.clj

啓動服務器,不會發生錯誤。

我建議你建立一個新的項目,然後再試一次。

+0

當我在emacs nrepl中編譯項目時出現錯誤....看起來像問題出現在工具鏈的emacs部分 - 我沒有報告的部分。 'lein ring server'正在工作。 – 2013-03-10 04:39:31

+0

- 是的,重新啓動emacs並重做'nrepl-jack-in'解決了這個問題。看起來像改變project.clj你必須從project.clj目錄重新啓動'nrepl'。說得通。感謝您的線索! – 2013-03-10 04:46:04

+1

看來你不必在更改project.clj時重啓所有的東西。只需nrepl-eval-緩衝該文件,它將被nrepl服務器知道。 – yehe 2013-03-10 04:51:58