All Downloads are FREE. Search and download functionalities are using the official Maven repository.

message.mvc.convert.CustomMappingJackson2HttpMessageConverter Maven / Gradle / Ivy

There is a newer version: 2.5.9
Show newest version
package message.mvc.convert;

import java.lang.reflect.Type;
import org.springframework.data.domain.Page;
import org.springframework.http.HttpOutputMessage;
import org.springframework.http.converter.HttpMessageNotWritableException;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.util.CollectionUtils;

import java.io.IOException;
import java.util.Collection;

/**
 * 自动将domain类转成dto类.
 *
 * @author sunhao([email protected])
 * @version V1.0, 15/11/9 下午3:40
 */
public class CustomMappingJackson2HttpMessageConverter extends MappingJackson2HttpMessageConverter {
    @Override
    protected void writeInternal(Object object, Type type, HttpOutputMessage outputMessage) throws IOException, HttpMessageNotWritableException {
        if (object instanceof Page) {
            // 分页的
            object = converterForPage((Page) object);
        } else if (object instanceof Collection) {
            // 返回集合
            object = converterForCollection((Collection) object);
        } else {
            object = converterForDomain(object);
        }

        super.writeInternal(object, type, outputMessage);
    }

    @Override
    protected void writeInternal(Object o, HttpOutputMessage outputMessage) throws IOException, HttpMessageNotWritableException {
        writeInternal(o, null, outputMessage);
    }

    private Object converterForPage(Page object) {
        // 分页的
        if (CollectionUtils.isEmpty(object.getContent())) {
            return object;
        }

        Class p0 = object.getContent().get(0).getClass();
        AbstractConverter converter = ConverterHelper.getConverter(p0);

        if (converter == null) {
            return object;
        }

        return object.map(converter);
    }

    private Object converterForCollection(Collection object) {
        // 分页的
        if (CollectionUtils.isEmpty(object)) {
            return object;
        }

        Class p0 = object.toArray()[0].getClass();
        AbstractConverter converter = ConverterHelper.getConverter(p0);

        if (converter == null) {
            return object;
        }

        return converter.convert(object);
    }

    private Object converterForDomain(Object object) {
        AbstractConverter converter = ConverterHelper.getConverter(object.getClass());
        if (converter == null) {
            return object;
        }

        return converter.convert(object);
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy