DomainJsonSerializer.java 3.0 KB
Newer Older
ibizdev's avatar
ibizdev committed
1 2 3 4 5
package com.ibiz.util.serialize;

import java.io.IOException;
import java.lang.reflect.Method;

ibizdev's avatar
ibizdev committed
6 7
import lombok.extern.slf4j.Slf4j;

ibizdev's avatar
ibizdev committed
8 9 10 11 12 13 14 15 16 17
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.databind.ser.BeanPropertyWriter;
import com.fasterxml.jackson.databind.ser.BeanSerializer;
import com.fasterxml.jackson.databind.ser.std.BeanSerializerBase;

/**
 * Created by Felix on 2019/05/10.
 */
ibizdev's avatar
ibizdev committed
18
@Slf4j
ibizdev's avatar
ibizdev committed
19 20 21
public class DomainJsonSerializer extends BeanSerializer {

	BeanSerializer BeanSerializer = null ;
ibizdev's avatar
ibizdev committed
22

ibizdev's avatar
ibizdev committed
23 24 25 26
    protected DomainJsonSerializer(BeanSerializerBase src) {
		super(src);
	}

ibizdev's avatar
ibizdev committed
27

ibizdev's avatar
ibizdev committed
28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
	protected void serializeFields(Object bean, JsonGenerator gen, SerializerProvider provider)
            throws IOException
        {
            final BeanPropertyWriter[] props;
            if (_filteredProps != null && provider.getActiveView() != null) {
                props = _filteredProps;
            } else {
                props = _props;
            }
            int i = 0;
            try {
                for (final int len = props.length; i < len; ++i) {
                    BeanPropertyWriter prop = props[i];
                    if(prop.getName().contains("DirtyFlag"))
                    	continue ;
                    String strMethod = prop.getMember().getName()+"DirtyFlag" ;
                    Method dirtyFlagMethod = null ;
                    try{
                    	dirtyFlagMethod = bean.getClass().getMethod(strMethod);
                    }catch (Exception e){
ibizdev's avatar
ibizdev committed
48

ibizdev's avatar
ibizdev committed
49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77
                    }
                    if(dirtyFlagMethod!=null){
                    	if(!(boolean) dirtyFlagMethod.invoke(bean))
                    		continue ;
                    }
                    if (prop != null) { // can have nulls in filtered list
                        prop.serializeAsField(bean, gen, provider);
                    }
                }
                if (_anyGetterWriter != null) {
                    _anyGetterWriter.getAndSerialize(bean, gen, provider);
                }
            } catch (Exception e) {
                String name = (i == props.length) ? "[anySetter]" : props[i].getName();
                wrapAndThrow(provider, e, bean, name);
            } catch (StackOverflowError e) {
                // 04-Sep-2009, tatu: Dealing with this is tricky, since we don't have many
                //   stack frames to spare... just one or two; can't make many calls.

                // 10-Dec-2015, tatu: and due to above, avoid "from" method, call ctor directly:
                //JsonMappingException mapE = JsonMappingException.from(gen, "Infinite recursion (StackOverflowError)", e);
                JsonMappingException mapE = new JsonMappingException(gen, "Infinite recursion (StackOverflowError)", e);

                 String name = (i == props.length) ? "[anySetter]" : props[i].getName();
                mapE.prependPath(new JsonMappingException.Reference(bean, name));
                throw mapE;
            }
        }

ibizdev's avatar
ibizdev committed
78
}