2015-09-25 2 views
3

Я пытаюсь создать узел в своем хранилище данных Neo4j с использованием неоконсерваций clojure, и я столкнулся с ошибкой, которую я считаю связанные с форматированием json:Clojure JSON: Исключение: com.fasterxml.jackson.core.JsonGenerationException: не удается JSON кодировать объект класса:

Exception: com.fasterxml.jackson.core.JsonGenerationException: Cannot JSON encode object of class: class recursiftion.dao_graph$create_node: [email protected] 
         generate.clj:148 cheshire.generate/generate 
         generate.clj:119 cheshire.generate/generate 
          core.clj:31 cheshire.core/generate-string 
          core.clj:21 cheshire.core/generate-string 
         cypher.clj:51 clojurewerkz.neocons.rest.cypher/query 
         core.clj:2440 clojure.core/comp[fn] 
        dao_graph.clj:428 recursiftion.dao-graph/create-node 
         model.clj:131 recursiftion.model/createNode 
        controller.clj:206 recursiftion.controller/fn 
          core.clj:99 compojure.core/make-route[fn] 
          core.clj:45 compojure.core/if-route[fn] 
          core.clj:30 compojure.core/if-method[fn] 
          core.clj:112 compojure.core/routing[fn] 
         core.clj:2570 clojure.core/some 
          core.clj:112 compojure.core/routing 
         RestFn.java:139 clojure.lang.RestFn.applyTo 
          core.clj:632 clojure.core/apply 
          core.clj:117 compojure.core/routes[fn] 
       keyword_params.clj:32 ring.middleware.keyword-params/wrap-keyword-params[fn] 
... 

Я подозреваю, что это может быть связано с Чеширом на основе отчета об ошибке. Но я смущен, потому что я не включаю библиотеку Чешира в файл, где возникает ошибка.

меня это как моя обертка, потому что я делаю CORS POST & запросов GET и мне нужно вернуть JSON из моего controller.clj

(def app 
(-> (handler/api app-routes) 
(middleware/wrap-json-body {:keywords? true}) 
(middleware/wrap-json-response) 
(wrap-cors routes #"^http://localhost:9000$"))) 

Ниже приведены библиотеки ссылки в моем controller.clj

(ns recursiftion.controller 
(:use [ring.adapter.jetty :only [run-jetty]] 
[recursiftion.websocket :only [wamp-handler]] 
[recursiftion.config :only [conf]] 
) 
(:require [compojure.core :refer :all] 
[compojure.handler :as handler] 
[compojure.route :as route] 
[clojure.java.io :as io] 
[ring.util.io :refer [string-input-stream]] 
[ring.util.response :as resp] 
[ring.util.response :refer [response]] 
[ring.middleware.json :as middleware] 
[ring.middleware.cors :refer [wrap-cors]] 
[environ.core :refer [env]] 
[cheshire.core :refer :all] 
[recursiftion.model :as model] 
[monger.json] 
[clojure.pprint :refer [pprint]])) 

Вот мой POST-код конечной точки в моей controller.clj

(POST "/node/create" request 
(let [node_object (or (get-in request [:params :data]) 
(get-in request [:body :data]) 
"1ROUTER_ERROR")] 
{:status 200 
:headers {"Content-Type" "application/json"} 
:body (recursiftion.model/createNode node_object) 
} 
)) 

Вот ссылочные библиотеки, которые проходят через мою модель и найдены в dao_graph.clj

(ns recursiftion.dao_graph 
(:require [clojure.string] 
[clojurewerkz.neocons.rest :as nr] 
[clojurewerkz.neocons.rest.cypher :as cy] 
[clojure.pprint :refer [pprint]]) 
(:import [org.bson.types.ObjectId]) 
) 

Вот определение функции, которая вызывается внутри dao_graph.clj:

(defn create-node [ nodeobj ] 
(let [ _nodeobj nodeobj ] 
(cy/tquery conn create-node { :_nodetype (get-in _nodeobj [:type]) }))) 

И здесь это ничтожество запрос, который возвращает карту с «...» в качестве его ключей

(def create-node "CREATE (m:{_nodetype}) 
RETURN M;") 

Я очень благодарен за помощь в решении этой проблемы.

+0

Вам нужно будет сделать более минимальный пример, чтобы люди могли эффективно помочь вам. –

+0

этот пост уже получил несколько upvotes, так что, похоже, есть другие люди, у которых также есть проблемы с тем же типом. Если я добавлю щедрость на этот вопрос, вы можете помочь? –

+1

Единственный способ, которым я могу эффективно помочь, - создать минимальный неудачный пример, который я могу запустить. В идеале это было бы и здесь, и в репозитории с открытым исходным кодом, где я могу клонировать и запускать. Щедрость была бы приятной, но мне нужна дополнительная информация :) –

ответ

1

Информация не достаточна. Однако это исключение часто встречается, когда чешир не распознает тип данных того, что, как ему сказали, кодируется как json. Ошибка выглядит так, как будто вы пытаетесь json кодировать функцию, а не выводить из функции? Я бы добавил println в вашей конечной точке и распечатал то, что, по вашему мнению, возвращается. Если вывод выглядит как объект функции, а не то, что json может кодировать, это, вероятно, причина.

Что касается этого события, я предполагаю, что ваше промежуточное ПО пытается кодировать тело ответа как json.

Смежные вопросы