通过post请求,我希望发布的CRM的API文档也要求我发布一个JSON文件。
JSON文件是一个多层次的文件,在clojure中被看作是一个持久的数组映射。
我要发布的代码是:
(def contacts (http/post "https://api.close.com/api/v1/data/search"
{:basic-auth [api ""]
:body closeFilter
})) CloseFilter表示我希望发布的mutli级别的JSON。
但是,我得到以下错误:
class clojure.lang.PersistentArrayMap cannot be cast to class [B (clojure.lang.PersistentArrayMap is in unnamed module of loader 'app'; [B is in module java.base of loader 'bootstrap')
我在这里犯了什么错误?
更新
我正在重新创建一个我在Javascript中的程序。发布相同的文件工作得很好。
更新2- MRE
我仍然在努力解决这个问题,所以这里是我的代码的一个例子。
我的代码首先要求我需要的包:
(ns schedule-emails.core
(:require [clj-http.client :as http]
[clojure.data.json :as json]
[cheshire.core :refer :all]))然后,我将本地JSON文件从我的文件系统解析到应用程序中。JSON。这将返回带有嵌入向量的映射映射。
(def closeFilter
(json/read-str
(slurp "URL TO LOCAL FILE")))最后,我想将这些信息从本地文件发布到软件中:
def contacts (http/post "API URL HERE"
{:accept :json
:as :json
:content-type :json
:basic-auth [api ""]
:body closeFilter}))但是,我得到以下错误:
class clojure.lang.PersistentArrayMap cannot be cast to class [B (clojure.lang.PersistentArrayMap is in unnamed module of loader 'app'; [B is in module java.base of loader 'bootstrap')
我也尝试了下面建议的解决方案,但我也遇到了同样的问题。
发布于 2022-06-05 13:22:54
clj-http不会自行与某些后端谈判它所期望的内容,并“自动”胁迫传输的数据。但是,您可以配置,在JSON的情况下,一些具有适当内容类型的数据将从主体转换为请求,并使用JSON返回到响应中的数据。
cheshire添加为依赖项。请参阅可选依赖关系当然,另一个选择是自己处理这个问题。因此,您需要添加一个库,它可以从/创建JSON到字符串或流、content-type并转换主体/响应。
https://stackoverflow.com/questions/72507476
复制相似问题