J'essaie de créer un noeud dans mon datastore Neo4j en utilisant des néocons clojure et je rencontre une erreur que je pense être lié à la mise en forme json:Clojure JSON: Exception: com.fasterxml.jackson.core.JsonGenerationException: Impossible d'encoder l'objet de la classe 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]
...
Je soupçonne que cela peut être lié à Cheshire basé sur le rapport d'erreur. Mais je suis confus parce que je n'inclue pas la bibliothèque de Cheshire dans le dossier où l'erreur se produit.
J'ai ce que mon emballage parce que je fais CORS POST & requêtes GET et je dois retourner JSON de mon controller.clj
(def app
(-> (handler/api app-routes)
(middleware/wrap-json-body {:keywords? true})
(middleware/wrap-json-response)
(wrap-cors routes #"^http://localhost:9000$")))
Ci-dessous sont les bibliothèques référencées dans mon 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]]))
Voici mon POST code de noeud final dans mon 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)
}
))
Voici les bibliothèques référencées qui passent à travers mon modèle et se trouvent dans un 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])
)
Voici la définition de la fonction qui est invoquée à l'intérieur dao_graph.clj:
(defn create-node [ nodeobj ]
(let [ _nodeobj nodeobj ]
(cy/tquery conn create-node { :_nodetype (get-in _nodeobj [:type]) })))
Et ici est la requête Cypher qui retourne une carte avec « ... » comme ses clés
(def create-node "CREATE (m:{_nodetype})
RETURN M;")
Je suis très reconnaissant pour votre aide dans la résolution de ce problème.
Vous aurez besoin de faire un exemple plus minimal pour que les gens puissent vous aider efficacement. –
ce post a déjà reçu quelques upvotes donc il semble qu'il y a d'autres personnes là-bas qui ont aussi le même type de problème. Si j'ajoute une prime à cette question, pouvez-vous m'aider? –
La seule façon que je peux efficacement aider est si vous créez un exemple d'échec minimal que je peux exécuter. Idéalement, ce serait à la fois ici, et dans un dépôt open source quelque part que je peux cloner et exécuter. Une prime serait bien, mais j'ai besoin de plus d'informations aussi :) –