TestCustomMappingInstant.java

package net.minidev.json.testMapping;

import static org.junit.jupiter.api.Assertions.assertEquals;

import java.io.IOException;
import java.time.Instant;
import net.minidev.json.JSONStyle;
import net.minidev.json.JSONValue;
import net.minidev.json.parser.ParseException;
import net.minidev.json.writer.JsonReaderI;
import org.junit.jupiter.api.Test;

/**
 * Test JDK 8+ java.time.Instant
 *
 * <p>Serialize a custom class Sample 1
 *
 * @author uriel
 */
public class TestCustomMappingInstant {

  @Test
  public void test_dummy() throws IOException {
    @SuppressWarnings("unused")
    ParseException e = null;
    JSONValue.toJSONString(true, JSONStyle.MAX_COMPRESS);
  }

  public void test_instant() {
    JSONValue.registerWriter(
        java.time.Instant.class,
        new net.minidev.json.reader.JsonWriterI<java.time.Instant>() {
          @Override
          public void writeJSONString(
              java.time.Instant value, Appendable out, JSONStyle compression) throws IOException {
            if (value == null) out.append("null");
            else out.append(Long.toString(value.toEpochMilli()));
          }
        });

    JSONValue.registerReader(
        RegularClass.class,
        new JsonReaderI<RegularClass>(JSONValue.defaultReader) {
          @Override
          public void setValue(Object current, String key, Object value)
              throws ParseException, IOException {
            if (key.equals("instant")) {
              Instant inst = Instant.ofEpochMilli((((Number) value).longValue()));
              ((RegularClass) current).setInstant(inst);
            }
          }

          @Override
          public Object createObject() {
            return new RegularClass();
          }
        });
    Instant instant = Instant.now();
    RegularClass regularClass = new RegularClass();
    regularClass.setInstant(instant);
    String data = JSONValue.toJSONString(regularClass);
    RegularClass result = JSONValue.parse(data, RegularClass.class);
    assertEquals(result.getInstant(), instant);
  }

  public static class RegularClass {
    private java.time.Instant instant;

    public java.time.Instant getInstant() {
      return instant;
    }

    public void setInstant(java.time.Instant instant) {
      this.instant = instant;
    }
  }
}