2015-08-03 5 views
1

Я пытаюсь выполнить простой пост json с брызгами. Но кажется, что я могу получить объект http для объекта json, который может быть Marshall.Как выполнить простой пост json с распылителем в распылителе?

здесь моя ошибка:

[error] ...../IdeaProjects/PoolpartyConnector/src/main/scala/org/iadb/poolpartyconnector/thesaurusoperation/ThesaurusCacheService.scala:172: could not find implicit value for evidence parameter of type spray.httpx.marshalling.Marshaller[spray.json.JsValue]

[error] val request = Post(s"$thesaurusapiEndpoint/$coreProjectId/suggestFreeConcept?", suggestionJsonBody)

и код, который приходит с ней:

override def createSuggestedFreeConcept(suggestedPrefLabel: String, lang: String, scheme: String, b: Boolean): String = { 

    import system.dispatcher 
    import spray.json._ 

    val pipeline  = addCredentials(BasicHttpCredentials("superadmin", "poolparty")) ~> sendReceive 


    val label    = LanguageLiteral(suggestedPrefLabel, lang) 
    val suggestion   = SuggestFreeConcept(List(label), b, Some(List(scheme)), None, None,None, None) 
    val suggestionJsonBody = suggestion.toJson 

    val request   = Post(s"$thesaurusapiEndpoint/$coreProjectId/suggestFreeConcept?", suggestionJsonBody) 

    val res    = pipeline(request) 

    getSuggestedFromFutureHttpResponse(res) match { 

     case None => "" 
     case Some(e) => e 

    } 
    } 

Пожалуйста, не кто имеет представление о том, что происходит с неявным ИАС. Я, хотя спрей Джсон придет с неявным маршаллером.

ответ

0

Вот как я решил это:

override def createSuggestedFreeConcepts(suggestedPrefLabels: List[LanguageLiteral], scheme: String, checkDuplicates: Boolean): List[String] = { 


    import system.dispatcher 

    import spray.httpx.marshalling._ 
    import spray.httpx.SprayJsonSupport._ 

    val pipeline  = addCredentials(BasicHttpCredentials("superadmin", "poolparty")) ~> sendReceive 


    suggestedPrefLabels map { suggestedPrefLabel => 

     val suggestion = SuggestFreeConcept(List(suggestedPrefLabel), checkDuplicates, Some(List(Uri(scheme))), None, None, None, None) 
     val request  = Post(s"$thesaurusapiEndpoint/$coreProjectId/suggestFreeConcept", marshal(suggestion)) 

     val res   = pipeline(request) 

     getSuggestedFromFutureHttpResponse(res) match { 

     case None => "" 
     case Some(e) => e 

     } 

    } 

    } 

ключ:

import spray.httpx.marshalling._ import spray.httpx.SprayJsonSupport._

и

val request = Post(s"$thesaurusapiEndpoint/$coreProjectId/suggestFreeConcept", marshal(suggestion))

Я маршалом предложение. Объяснение не супер супер просто. Но, обратившись в док, объясняется.

1

Я предполагаю, что у вас уже есть пользовательский протокол Json где-то так, что suggestion.toJson работает правильно?

Попробуйте следующее:

val body = HttpEntity(`application/json`, suggestionJsonBody.prettyPrint) 
val request = Post(s"$thesaurusapiEndpoint/$coreProjectId/suggestFreeConcept?", body) 

вы можете также использовать compactPrint, а не prettyPrint, в любом случае, он превращает JSon в строку, содержащую информацию о JSon.

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

  • Нет связанных вопросов^_^