Package org.springside.examples.showcase.json

Source Code of org.springside.examples.showcase.json.JsonDemo$TestBean

package org.springside.examples.showcase.json;

import static org.junit.Assert.*;

import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;

import org.codehaus.jackson.annotate.JsonIgnoreProperties;
import org.codehaus.jackson.type.TypeReference;
import org.joda.time.DateTime;
import org.junit.Test;
import org.springside.modules.utils.encode.JsonBinder;

import com.google.common.collect.Lists;
import com.google.common.collect.Maps;

/**
* 测试Jackson对Object,Map,List,数组,枚举,日期类等的持久化.
*
* @author calvin
*/
public class JsonDemo {

  private static JsonBinder binder = JsonBinder.buildNonDefaultBinder();

  /**
   * 序列化对象/集合到Json字符串.
   */
  @Test
  public void toJson() throws Exception {
    //Bean
    TestBean bean = new TestBean("A");
    String beanString = binder.toJson(bean);
    System.out.println("Bean:" + beanString);
    assertEquals("{\"name\":\"A\"}", beanString);

    //Map
    Map<String, Object> map = Maps.newLinkedHashMap();
    map.put("name", "A");
    map.put("age", 2);
    String mapString = binder.toJson(map);
    System.out.println("Map:" + mapString);
    assertEquals("{\"name\":\"A\",\"age\":2}", mapString);

    //List<String>
    List<String> stringList = Lists.newArrayList("A", "B", "C");
    String listString = binder.toJson(stringList);
    System.out.println("String List:" + listString);
    assertEquals("[\"A\",\"B\",\"C\"]", listString);

    //List<Bean>
    List<TestBean> beanList = Lists.newArrayList(new TestBean("A"), new TestBean("B"));
    String beanListString = binder.toJson(beanList);
    System.out.println("Bean List:" + beanListString);
    assertEquals("[{\"name\":\"A\"},{\"name\":\"B\"}]", beanListString);

    //Bean[]
    TestBean[] beanArray = new TestBean[] { new TestBean("A"), new TestBean("B") };
    String beanArrayString = binder.toJson(beanArray);
    System.out.println("Array List:" + beanArrayString);
    assertEquals("[{\"name\":\"A\"},{\"name\":\"B\"}]", beanArrayString);
  }

  /**
   * 从Json字符串反序列化对象/集合.
   */
  @Test
  @SuppressWarnings("unchecked")
  public void fromJson() throws Exception {
    //Bean
    String beanString = "{\"name\":\"A\"}";
    TestBean bean = binder.fromJson(beanString, TestBean.class);
    System.out.println("Bean:" + bean);

    //Map
    String mapString = "{\"name\":\"A\",\"age\":2}";
    Map<String, Object> map = binder.fromJson(mapString, HashMap.class);
    System.out.println("Map:");
    for (Entry<String, Object> entry : map.entrySet()) {
      System.out.println(entry.getKey() + " " + entry.getValue());
    }

    //List<String>
    String listString = "[\"A\",\"B\",\"C\"]";
    List<String> stringList = binder.getMapper().readValue(listString, List.class);
    System.out.println("String List:");
    for (String element : stringList) {
      System.out.println(element);
    }

    //List<Bean>
    String beanListString = "[{\"name\":\"A\"},{\"name\":\"B\"}]";
    List<TestBean> beanList = binder.getMapper().readValue(beanListString, new TypeReference<List<TestBean>>() {
    });
    System.out.println("Bean List:");
    for (TestBean element : beanList) {
      System.out.println(element);
    }
  }

  /**
   * 测试传入空对象,空字符串,Empty的集合,"null"字符串的结果.
   */
  @SuppressWarnings("unchecked")
  @Test
  public void nullAndEmpty() {
    // toJson测试 //

    //Null Bean
    TestBean nullBean = null;
    String nullBeanString = binder.toJson(nullBean);
    assertEquals("null", nullBeanString);

    //Empty List
    List<String> emptyList = Lists.newArrayList();
    String emptyListString = binder.toJson(emptyList);
    assertEquals("[]", emptyListString);

    // fromJson测试 //

    //Null String for Bean
    TestBean nullBeanResult = binder.fromJson(null, TestBean.class);
    assertNull(nullBeanResult);

    nullBeanResult = binder.fromJson("null", TestBean.class);
    assertNull(nullBeanResult);

    //Null/Empty String for List
    List nullListResult = binder.fromJson(null, List.class);
    assertNull(nullListResult);

    nullListResult = binder.fromJson("null", List.class);
    assertNull(nullListResult);

    nullListResult = binder.fromJson("[]", List.class);
    assertEquals(0, nullListResult.size());
  }

  /**
   * 测试三种不同的Binder.
   */
  @Test
  public void threeTypeBinders() {
    //打印全部属性
    JsonBinder normalBinder = JsonBinder.buildNormalBinder();
    TestBean bean = new TestBean("A");
    assertEquals("{\"nullValue\":null,\"name\":\"A\",\"defaultValue\":\"hello\"}", normalBinder.toJson(bean));

    //不打印nullValue属性
    JsonBinder nonNullBinder = JsonBinder.buildNonNullBinder();
    assertEquals("{\"name\":\"A\",\"defaultValue\":\"hello\"}", nonNullBinder.toJson(bean));

    //不打印默认值未改变的nullValue与defaultValue属性
    JsonBinder nonDefaultBinder = JsonBinder.buildNonNullBinder();
    assertEquals("{\"name\":\"A\"}", nonDefaultBinder.toJson(bean));
  }

  /**
   * 测试对枚举与日期的序列化.
   */
  @Test
  public void enumAndDate() {
    //Enum会以名称(name)序列化.
    assertEquals("\"One\"", binder.toJson(TestEnum.One));

    //Enum可以名称(name)或从0开始的顺序号(ordinal)反序列化.
    assertEquals(TestEnum.One, binder.fromJson("0", TestEnum.class));
    assertEquals(TestEnum.One, binder.fromJson("\"One\"", TestEnum.class));

    DateTime jodaDate = new DateTime();

    //日期默认以Timestamp方式存储
    Date date = new Date(jodaDate.getMillis());
    String tsString = String.valueOf(jodaDate.getMillis());

    assertEquals(tsString, binder.toJson(date));

    assertEquals(date, binder.fromJson(tsString, Date.class));

    //日期以设定日期格式的方式存储,考虑时区与Locale, 慎用.
    String dateString = "\"" + jodaDate.toString("yyyy-MM-dd") + "\"";
    binder.setDateFormat("yyyy-MM-dd");

    assertEquals(dateString, binder.toJson(date));

    Date dateResult = binder.fromJson(dateString, Date.class);
    System.out.println(dateResult);
    assertEquals(new DateTime(dateResult).getDayOfYear(), jodaDate.getDayOfYear());

  }

  //此annoation为了截断对象的循环引用.
  @JsonIgnoreProperties( { "parent" })
  public static class TestBean {

    private String name;
    private String defaultValue = "hello";
    private String nullValue = null;
    private TestBean parent;

    public TestBean() {
    }

    public TestBean(String name) {
      this.name = name;
    }

    public String getName() {
      return name;
    }

    public void setName(String name) {
      this.name = name;
    }

    public String getDefaultValue() {
      return defaultValue;
    }

    public void setDefaultValue(String defaultValue) {
      this.defaultValue = defaultValue;
    }

    public String getNullValue() {
      return nullValue;
    }

    public void setNullValue(String nullValue) {
      this.nullValue = nullValue;
    }

    public TestBean getParent() {
      return parent;
    }

    public void setParent(TestBean parent) {
      this.parent = parent;
    }

    @Override
    public String toString() {
      return "TestBean [defaultValue=" + defaultValue + ", name=" + name + ", nullValue=" + nullValue + "]";
    }
  }

  public static enum TestEnum {
    One, Two, Three
  }
}
TOP

Related Classes of org.springside.examples.showcase.json.JsonDemo$TestBean

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.