2013-04-06 13 views
5

私はこのようなCompojure内のリソースを定義します:Compojure:オプションのURLパラメータ

(ANY "myres/:id" [id] (handler)) 

をし、私が欲しい:idはオプションであることを(IDは私のAPIが異なる動作をします指定されているか否かに応じて、 )。

これは私が

http://mydomain/myres/12 

にアクセスしようとした場合、私はIDを指定せずに

http://mydomain/myres 

にアクセスしようとした場合しかし、私は404

を得るOK作品はする方法はありますパラメータは:idはオプションか?

ありがとうございます!

答えて

8

それなしでidとお互いに2つの異なるルート1を作成し、以下に示すように、両方のルートからあなたのハンドラを呼び出すことについてはどう:

(defn handler 
    ([] "Response without id") 
    ([id] (str "Response with id - " id))) 

(defroutes my-routes 
    (ANY "myres" [] (handler)) 
    (ANY "myres/:id" [id] (handler id))) 
+0

が、私は間違いなく適用されますあなたのソリューションをありがとう!これは残念です。idパラメータはデフォルトではオプションとはみなされません。私は同じパターンの後に多くのリソースがある場合、特に2つのルートを定義しなければならないという考えが嫌いです: –

関連する問題