package com.alibaba.json.bvt.taobao; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.reflect.Field; import org.junit.Assert; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.annotation.JSONField; import com.alibaba.fastjson.serializer.BeanContext; import com.alibaba.fastjson.serializer.ContextValueFilter; import com.alibaba.fastjson.serializer.SerializerFeature; import junit.framework.TestCase; public class MTopTest extends TestCase { public void test_for_mtop() throws Exception { P0 p = new P0(); p.model = new Model(); ContextValueFilter valueFilter = new ContextValueFilter() { @Override public Object process(BeanContext context, Object object, String name, Object value) { if (value instanceof Model) { Assert.assertEquals(P0.class, context.getBeanClass()); Assert.assertNotNull(context.getField()); Assert.assertNotNull(context.getMethod()); Assert.assertEquals("model", context.getName()); Assert.assertEquals(Model.class, context.getFieldClass()); Assert.assertEquals(Model.class, context.getFieldType()); Assert.assertEquals(SerializerFeature.WriteMapNullValue.mask, context.getFeatures()); Field field = context.getField(); Assert.assertNotNull(field.getAnnotation(UrlIdentify.class)); Assert.assertNotNull(context.getAnnation(UrlIdentify.class)); return value; } return value; } }; JSON.toJSONString(p, valueFilter); } private static class P0 { @JSONField(serialzeFeatures=SerializerFeature.WriteMapNullValue) @UrlIdentify(schema = "xxxx") private Model model; public Model getModel() { return model; } public void setModel(Model model) { this.model = model; } } public static class Model { private int id; private String url; public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } public int getId() { return id; } public void setId(int id) { this.id = id; } } @Retention(RetentionPolicy.RUNTIME) public static @interface UrlIdentify { String schema(); } }