Open3

java.lang.NullPointerException: Response map is nil

しんせいたろうしんせいたろう

java.lang.NullPointerException: Response map is nil エラーに悩まされている

:dependencies [[org.clojure/clojure "1.10.1"]
                 [javax.servlet/servlet-api "2.5"]
                 [ring "1.9.4"]
                 [metosin/reitit "0.5.15"]
                 [metosin/muuntaja "0.6.8"]]

で、

(ns myapp.core
  (:require
   [ring.adapter.jetty :as jetty]
   [reitit.ring :as ring]))

(defn handler [req]
  {:status 200
   :headers {"Content-Type" "text/plain; charset=utf-8"}
   :body "Hello"})

(def app
  (ring/ring-handler
   (ring/router
    ["/"
     ["" handler]])))

(defn start []
  (jetty/run-jetty app {:port 3333
                        :join? false}))

(comment
  (def server (start))
  (.stop server)
  ;; 
  )

これでサーバーを立ち上げ http://localhost:3333/ へ行くと、Helloは表示されるがログに

java.lang.NullPointerException: Response map is nil

が出力されるのにずっと悩んでる。
このExceptionは、ring/ring-handler を使うと出てしまう。つまり

(defn start []
  (jetty/run-jetty handler {:port 3333
                        :join? false}))

であれば、問題ない。

しんせいたろうしんせいたろう

こちらのポストを参考に

Clojureで作るAPI Web サーバーを立ち上げる - Toyokumo Tech Blog

dependencies をこのように変えて、

:dependencies [[org.clojure/clojure "1.10.1"]
              ;;  [javax.servlet/servlet-api "2.5"]
               [info.sunng/ring-jetty9-adapter "0.17.9" :exclusions [org.slf4j/slf4j-api]]
               [ring "1.9.4"]
               [metosin/reitit "0.5.15"]
               [metosin/muuntaja "0.6.8"]
               [spootnik/unilog "0.7.31"]]

jetty9 を使うようになったら、java.lang.NullPointerException: Response map is nil はでなくなった。

(ns myapp.core
  (:require
   ;; [ring.adapter.jetty :as jetty]
   [ring.adapter.jetty9 :as jetty9]
   [reitit.ring :as ring]))

(defn handler [req]
  {:status 200
   :headers {"Content-Type" "text/plain; charset=utf-8"}
   :body "Hello "})

(def app
  (ring/ring-handler
   (ring/router
    ["/"
     ["" handler]])))

(defn start []
  (jetty9/run-jetty app {:port 3333
                         :join? false}))

(comment
  (def server (start))
  (.stop server)
  ;; 
  )