Сериализация и десериализация объекта 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.