Маршалинг akka-http

class Converter extends 
RootJsonFormat[TypeToConvert]
{
def write(obj : TypeToConvert) : JsValue =
{
    obj match
    {
        case Https => JsString(Https.name)
        case Sms => JsString(Sms.name)
    }
}   
def read(jsValue : JsValue) : TypeToConvert =
{
    jsValue match
    {
        case JsString("HTTPS") => Https
        case JsString("SMS") => Sms
        case _ => throw 
  DeserializationException("Expected a TypeToConvert
    Type")
     }
  }
}

Я написал такой конвертер, и в нем я использую только метод записи. Есть ли способ написать средства форматирования json только методом записи. Я хочу удалить метод чтения.


person Manjot Kaur    schedule 13.08.2018    source источник
comment
я не думаю, что это возможно, поэтому вам придется писать как методы чтения, так и методы записи.   -  person Raman Mishra    schedule 13.08.2018


Ответы (1)


trait RootJsonFormat[T] extends JsonFormat[T] with RootJsonReader[T] with RootJsonWriter[T]

Как вы можете видеть, это то, как иерархия RootJsonFormat расширяет JsonFormat. Который использует RootJsonReader, а также RootJsonWriter. Если вы хотите использовать только JsonWriter. Затем расширьте свой класс с помощью RootJsonWriter.

Вы используете RootJsonFormat со своим классом, в этом случае вам придется использовать методы определения записи и чтения.

class Converter extends 
RootJsonWriter[TypeToConvert]
{
def write(obj : TypeToConvert) : JsValue =
{
    obj match
    {
        case Https => JsString(Https.name)
        case Sms => JsString(Sms.name)
    }
}   
}
person Raman Mishra    schedule 13.08.2018
comment
Есть ли предопределенный метод в spray json, который обеспечивает только реализацию записи для класса case? Например, jsonFormat5(...) обеспечивает реализацию как для чтения, так и для записи? - person Manjot Kaur; 13.08.2018
comment
вы можете создать собственный форматировщик Json, я не думаю, что есть какой-то встроенный форматтер с реализацией только записи, потому что не имеет смысла иметь только реализацию записи. - person Raman Mishra; 13.08.2018
comment
На самом деле, на данный момент я занимаюсь только маршалингом, используя только метод записи, и мне не нужен неиспользуемый код в моем проекте. - person Manjot Kaur; 13.08.2018
comment
Это не так работает!! я имею в виду, что это не неиспользуемый код, если у вас не будет ридера, то как вы собираетесь отменить свой запрос? из json в caseClass? таким образом вы можете сделать только другой способ маршалинга от caseClass до json. Вы должны иметь оба. - person Raman Mishra; 13.08.2018
comment
почему ты не можешь сделать как я ответил? используйте RoojJsonWriter, он должен работать - person Raman Mishra; 13.08.2018
comment
Фактически, этот тип, который я хочу преобразовать, используется в другом классе, и я определил jsonFormatter13(...) для этого другого класса, для которого требуются методы чтения и записи. Итак, этот RootJsonWriter[..] не работает с этим классом. - person Manjot Kaur; 13.08.2018
comment
Когда вы знаете, что вам нужны и читатель, и писатель, почему вы говорите, что используете только писатель? - person Raman Mishra; 13.08.2018