Hacktoberfest 2026:メンテナが10月に向けて印を付けた、オープンで初心者向けの issue。 Hacktoberfest の issue を見る

inconsistency in resource vs. macro based route definition behaviour

オープン
#321 コメント 0 件 リアクション 1 件 担当者 0 名 GitHub で見る

まだ誰も着手していません。

評価

難易度
3/5
見積もり時間
1〜2日
初心者へのやさしさ
35/100
issue の種類
バグ
明瞭さ
おおむね明確
活発さ
停滞
技術スタック
clojure
領域
api, backend

調査の方向性

POST /foo の curl リクエストを再現し、次にマクロベースの route と context/resource 定義を比較します。まず resource route の body パラメータのバリデーションとカスタム text/plain middleware から調査を始めます。両方の route 形式が同じリクエストを一貫して処理し、nil String バリデーションエラーが発生しなければ完了です。

索引モデルが issue の本文から書いたものです。

説明

When making:

curl -X POST \
  'http://localhost:7777/foo?rule_name=foo.logic&force_overwrite=true&version=1.1' \
  -H 'accept: application/json' \
  -H 'cache-control: no-cache' \
  -H 'content-type: text/plain' \
  -d 'bla'

the following definition behaves correctly:

(POST "/foo" []
        :middleware [[muuntaja.middleware/wrap-format
                      (muuntaja/create
                        (assoc-in muuntaja/default-options
                                  [:formats "text/plain"] text-plain-format))]]
        :query-params [version :- String, rule_name :- String, force_overwrite :- String]
        :body [b s/Str]
        :return s/Any           
        (ok
          {:ok b})

on other hand this one is failing

(context "/foo" []
        (resource {
                   :post {
                          :middleware [[muuntaja.middleware/wrap-format
                                        (muuntaja/create
                                          (assoc-in muuntaja/default-options
                                                    [:formats "text/plain"] text-plain-format))]]

                          :parameters {:body-params  String
                                       :query-params {:version         s/Str
                                                      :rule_name       s/Str
                                                      :force_overwrite s/Str}}
                          :consumes   ["text/plain"]
                          :responses  {http-status/ok {:schema s/Any}}
                          :handler    (fn [{body :body-params {:keys [version rule_name]} :path-params}]
                                        (ok
                                          {:foo body}
                                          ))}}))

the error is:

{
    "schema": "java.lang.String",
    "errors": "(not (instance? java.lang.String nil))",
    "type": "compojure.api.exception/request-validation",
    "coercion": "schema",
    "value": null,
    "in": [
        "request",
        "body-params"
    ]
}

I use this auxiliary fun:


(def text-plain-format
  {:decoder [(fn make-json-decoder [options]
               (fn [x ^String charset]
                 (if (string? x)
                   x
                   (slurp (InputStreamReader. ^InputStream x charset)))))]

   :encoder [(fn make-json-encoder [options]
               (fn [data ^String charset]
                 (ByteArrayInputStream. (.getBytes data charset))))]})
主要言語
Clojure
スター
1.1k
フォーク
145
PR マージ指標
30日以内にマージされた PR はありません

環境構築

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

metosin/compojure-api のほかの issue

metosin/compojure-api の issue をすべて見る

似ている issue

Clojure の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。