import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import org.quickbundle.project.serializer.RmObjectMapper;
import com.fasterxml.jackson.core.JsonEncoding;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.core.io.SegmentedStringWriter;
import com.fasterxml.jackson.databind.BeanDescription;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationConfig;
import com.fasterxml.jackson.databind.cfg.SerializerFactoryConfig;
import com.fasterxml.jackson.databind.ser.BeanSerializerFactory;
import com.fasterxml.jackson.databind.ser.impl.SimpleBeanPropertyFilter;
import com.fasterxml.jackson.databind.ser.impl.SimpleFilterProvider;
public class TestJackson {
public static void main(String[] args) {
List<Message> lvo = new ArrayList<Message>();
lvo.add(new Message("1","a","a1"));
lvo.add(new Message("2","b","a1bbb"));
lvo.add(new Message("3","c","a1ccc"));
String result = writeBackListToRowTable("a", lvo, new String[]{"age"}, null);
System.out.println(result);
try {
System.out.println(RmObjectMapper.getInstance().readValue("{\"a\":{\"1\":1,\"2\":2},\"b\":3}", HashMap.class).get("a").getClass());
} catch (Exception e) {
e.printStackTrace();
}
}
public static String writeBackListToRowTable(String namespace, List lvo, final String[] ignoreName, ObjectMapper objectMapper) {
if(lvo == null || lvo.size() == 0) {
return "";
}
//TODO ignoreName
if(objectMapper == null) {
objectMapper = RmObjectMapper.getInstance();
}
JsonEncoding encoding = JsonEncoding.UTF8;
objectMapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd"));
StringBuilder result = new StringBuilder();
result.append("jQuery(function(){\n");
result.append("writeBackListToRowTable(");
result.append("'");
result.append(namespace);
result.append("'");
result.append(", \n");
try {
// 排除
SimpleFilterProvider fileter = new SimpleFilterProvider();
fileter.addFilter("executeFilter", SimpleBeanPropertyFilter.serializeAllExcept(ignoreName));
objectMapper.setFilters(fileter);
// // 仅包含
// SimpleFilterProvider fileter2 = new SimpleFilterProvider();
// fileter2.addFilter("includeFilter", SimpleBeanPropertyFilter.filterOutAllExcept(new String[] { "id", "quality" }));
// objectMapper.setFilters(fileter2);
// 设置日期格式化
objectMapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));
SegmentedStringWriter sw = new SegmentedStringWriter(objectMapper.getFactory()._getBufferRecycler());
JsonGenerator generator = objectMapper.getFactory().createJsonGenerator(sw);
RmBeanSerializerFactory bidBeanFactory = RmBeanSerializerFactory.instance;
bidBeanFactory.setFilterId("executeFilter"); // 如果是仅包含这里填写 includeFilter
objectMapper.setSerializerFactory(bidBeanFactory);
objectMapper.writeValue(generator, lvo);
result.append( sw.getAndClear());
} catch (Exception e) {
throw new RuntimeException(e);
}
result.append("\n);");
result.append("\n});");
return result.toString();
}
}
class RmBeanSerializerFactory extends BeanSerializerFactory {
public final static RmBeanSerializerFactory instance = new RmBeanSerializerFactory(null);
private Object filterId;
protected RmBeanSerializerFactory(SerializerFactoryConfig config) {
super(config);
}
/**
* Method called to find filter that is configured to be used with bean
* serializer being built, if any.
*/
protected Object findFilterId(SerializationConfig config, BeanDescription beanDesc)
{
return getFilterId();
}
public Object getFilterId() {
return filterId;
}
public void setFilterId(Object filterId) {
this.filterId = filterId;
}
}
class Message {
public Message(String id, String name, String age) {
this.id = id;
this.name = name;
this.age = age;
}
String id;
String name;
String age;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
}