采用FastJsonHttpMessageConverter格式化web返回值

517 阅读1分钟

采用FastJsonHttpMessageConverter格式化web返回值

package org.onedayday.framework.web.config;

import com.alibaba.fastjson.serializer.SerializeConfig;
import com.alibaba.fastjson.serializer.ToStringSerializer;
import com.alibaba.fastjson.support.config.FastJsonConfig;
import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.StringHttpMessageConverter;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

import java.math.BigInteger;
import java.nio.charset.StandardCharsets;
import java.util.List;

import static com.alibaba.fastjson.serializer.SerializerFeature.*;


/**
 * @class: WebConfig
 * @description:
 * @author: wdd
 */
@Configuration
@EnableWebMvc
@Slf4j
public class WebMvcConfig implements WebMvcConfigurer {
    @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
        FastJsonHttpMessageConverter converter = new FastJsonHttpMessageConverter();
        FastJsonConfig config = getFastJsonConfig();
        converter.setFastJsonConfig(config);
        converters.clear();
        converters.add(converter);
        StringHttpMessageConverter stringHttpMessageConverter = new StringHttpMessageConverter(StandardCharsets.UTF_8);
        converters.add(stringHttpMessageConverter);
        log.info("返回值序列化格式初始化完成!");
    }

    private FastJsonConfig getFastJsonConfig() {
        //序列化配置
        FastJsonConfig config = new FastJsonConfig();
        config.setSerializerFeatures(
                // 输出key时是否使用双引号
                QuoteFieldNames,
                //WriteMapNullValue,
                //数值字段如果为null,输出为0,而非null
                WriteNullNumberAsZero,
                //List字段如果为null,输出为[],而非null
                WriteNullListAsEmpty,

                WriteBigDecimalAsPlain,
                //字符类型字段如果为null,输出为"",而非null
                WriteNullStringAsEmpty,
                //Boolean字段如果为null,输出为false,而非null
                WriteNullBooleanAsFalse,
                //WriteNullStringAsEmpty,// null String不输出
                //WriteMapNullValue,//null String也要输出
                //Date的日期转换器
                WriteDateUseDateFormat,
                //禁止循环引用
                DisableCircularReferenceDetect
        );
        config.setSerializeFilters(new BigDecimalValueFilter());
        config.setSerializeConfig(getSerializeConfig());
        return config;
    }

    private SerializeConfig getSerializeConfig() {
        //自定义拦截器
        SerializeConfig serializeConfig = SerializeConfig.globalInstance;
        serializeConfig.put(BigInteger.class, ToStringSerializer.instance);
        serializeConfig.put(Long.class, ToStringSerializer.instance);
        serializeConfig.put(Long.TYPE, ToStringSerializer.instance);
        return serializeConfig;
    }
}

BigDecimal类型的值 返回时保留两位小数

package org.onedayday.framework.web.config;


import com.alibaba.fastjson.serializer.ValueFilter;

import java.math.BigDecimal;

/**
 * @program: framework
 * @class: BigDecimalValueFilter
 * @description:
 * @author: wdd
 */

public class BigDecimalValueFilter implements ValueFilter {

    @Override
    public Object process(Object object, String name, Object value) {
        if (value != null && value instanceof BigDecimal) {
            return String.format("%.2f", ((BigDecimal) value).doubleValue());
        }
        return value;
    }

    public static void main(String[] args) {
        BigDecimalValueFilter bigDecimalValueFilter = new BigDecimalValueFilter();
        BigDecimal value = BigDecimal.valueOf(10.00601);
        Object o =  bigDecimalValueFilter.process(null,"value",value);
        System.out.println(o);
    }
}