Я подозреваю, что, возможно, спрей имеет неявное определение для JsonFormat[List[T]]
, заданное JsonFormat[T]
, а не JsonReader[List[T]]
, данное JsonReader[T]
. К счастью, это довольно просто сделать, например:
implicit def listReader[T : JsonReader]: JsonReader[List[T]] = new JsonReader[List[T]] {
def read(value: JsValue): List[T] = value match {
case JsArray(elements) => elements.map(_.convertTo[T]).toList
case x => deserializationError("Expected List as JsArray, but got " + x)
}
}
На самом деле мне интересно, почему они не просто определили все свои неявные JsonReader
s и JsonWriter
s отдельно, а затем один implicit def bothToFormat[T : JsonReader : JsonWriter]: JsonFormat[T]
Попробуйте загрузить файл в CLI и сначала устранить все ошибки, а затем вставьте команду cURL в свой код. Вы можете использовать опцию curl -v
, чтобы сообщить cURL, чтобы вывести заголовки и содержимое фактического запроса, который был отправлен, чтобы помочь вам разобраться в ошибках.
Не глядя на ваш запрос GET, который был фактически отправлен, я бы предложил удалить заголовки User-Agent
и Accept
(в соответствии с заголовками общего запроса , помеченными как приемлемые AWS) при отборе объекта S3 использование URL-адресов с изменяющими заголовок строками запроса (например, ссылка для загрузки выходных данных вашей фотосессии). Вы можете сделать это с опциями, как показано ниже:
curl -H "Accept:" -H "User-Agent:" -o "path/to/your/saved/file" http://s3.amazonaws.com/...
Если не указано иное, cURL отправляет запрос GET со значениями по умолчанию для этих заголовков. Учитывая сообщение об ошибке, которое вы получили, это могло быть уловкой здесь.