2015-05-22 5 views
1

Я пытаюсь создать общий Writer, чтобы получить строковое представление json с Play Json. То, что у меня до сих порНе удается разрешить Writes [T] во время компиляции в Play Json

import com.twitter.finatra.http.Controller 
import play.api.libs.json.{Json, Writes} 

trait MyController extends Controller { 
    def handle(request: AnyRef) = 
    response 
    .ok 
    .json(createJsonResponse(manage(request))) 
    .toFuture 

    def manage[T : Writes](request: AnyRef): T 

    // There should be an implicit Writes[T] in scope 
    def createJsonResponse[T : Writes](data: T) = Json.stringify(Json.toJson[T](data)) 
} 

Я case class TotalsForResponse(issuer: String, total: Int) определены и

object JsonFormatters { 
    implicit val totalsForResponseWrites = Json.format[TotalsForResponse] 
    } 

Это должно обеспечить мне в компиляции с неявной Writes [T] в области. В одном из моих контроллеров у меня есть

def manage[T : Writes](request: AnyRef) = request match { 

case TotalInvestorsForRequest(issuer) => 
    TotalsForResponse(issuer, 
    TitleSectionDBHandler.totalInvestorsFor(issuer)) 
    .asInstanceOf[T] 
} 

, что приводит к diverging implicit expansion for type play.api.libs.json.Writes[Nothing] во время компиляции. Это было взято с this example, и я не мог заставить его работать. Есть идеи?

+0

Как может возникать ошибка неявного разрешения во время выполнения? – cchantep

+0

Исправлено, что «скомпилировать» спасибо! –

+0

Я не вижу нигде в коде, который вы опубликовали, в котором обобщенный тип 'T' актуализирован (я имею в виду, что конкретный тип задается как общий тип' T'). Весь код кажется мне немного странным, не уверен, чего вы хотите достичь, но я сначала должен убедиться, что 'Json.toJson [TotalsForResponse]' компилируется успешно. –

ответ

0

В примере, который вы связали, вы забыли добавить import JsonFormatters._, чтобы принести Format[T] в объем.

+0

импортировал их, все еще получая ту же ошибку во время компиляции –

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

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