Сериализация и десериализация объекта Play2 Html

У меня есть класс Case для документов. Чтобы сериализовать его и десериализовать в и из текста Json, я определил неявный объект Reads and Writes.

Если мой класс Document содержит только Int и String, у меня нет проблем. Однако, когда у меня есть значение типа Html в моем классе Case, у меня возникает проблема.

Это гнездовая сериализация и десериализация. У меня проблема с созданием Reader для HTML. Play 2 Html не относится к классу дел. Это проблема?

Правильно ли следующий код:

implicit object HtmlReads extends play.api.libs.json.Reads[Html] {
       def reads(json: JsValue) = Html (
           (json \ "text").as[String] 
        )
}

Это не работает. Как я должен это делать? Спасибо

1 ответ

Вот как я решил эту проблему в Java (но я думаю, что это то же самое в Scala): я создаю класс JsonSerializer для преобразования класса в строку, а затем я отмечаю поля, которые будут переведены в Json с моим классом.

Пример, чтобы показать вам, как это работает на сегодняшний день:

import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import com.fasterxml.jackson.databind.*;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.core.JsonProcessingException;
import org.springframework.stereotype.Component;

/**
 * Used to serialize Java.util.Date, which is not a common JSON
 * type, so we have to create a custom serialize method;.
 *
 * @author Loiane Groner
 */
@Component
public class JsonDateSerializer extends JsonSerializer<Date>{

    private static final SimpleDateFormat dateFormat = new SimpleDateFormat("MM-dd-yyyy");

    @Override
    public void serialize(Date date, JsonGenerator gen, SerializerProvider provider)
            throws IOException, JsonProcessingException {
        String formattedDate = dateFormat.format(date);
        gen.writeString(formattedDate);
    }
}

Затем я отмечаю соответствующее поле своим классом:

public class MyClass
{
    @Formats.DateTime(pattern="dd/MM/yyyy")
    @JsonSerialize(using=JsonDateSerializer.class)
    public Date     myDate;
}

Ainsi, lorsque j'utilise mapper.writeValueAsString (lst), j'obtiens des date au format: 08-13-2014

Я скопировал источники из Loiane Groner.

Другие вопросы по тегам