千家信息网

自定义枚举gson的转换

发表于:2025-02-04 作者:千家信息网编辑
千家信息网最后更新 2025年02月04日,本篇内容介绍了"自定义枚举gson的转换"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!CodedTy
千家信息网最后更新 2025年02月04日自定义枚举gson的转换

本篇内容介绍了"自定义枚举gson的转换"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!


CodedTypeTypeAdapter

import com.google.gson.*;import com.utils.mybatis.CodedEnum;import java.lang.reflect.Type;/** * CodedEnum在GSON中的转换规则,使用code,而不是字符 * * @param  * @author tenmao */public class CodedTypeTypeAdapter & CodedEnum> implements JsonSerializer, JsonDeserializer {    @Override    public E deserialize(JsonElement jsonElement, Type type, JsonDeserializationContext jsonDeserializationContext) throws JsonParseException {        if (type instanceof Class) {            @SuppressWarnings("unchecked")            Class klass = (Class) type;            return CodedEnum.codeOf(klass, jsonElement.getAsInt()).orElse(null);        } else {            throw new RuntimeException(String.format("json %s cannot convert to type %s", jsonElement, type));        }    }    @Override    public JsonElement serialize(E e, Type type, JsonSerializationContext jsonSerializationContext) {        return new JsonPrimitive(e.getCode());    }}

HttpMessageConverter

import com.google.gson.GsonBuilder;import com.tenmao.utils.mybatis.CodedEnum;import com.tenmao.utils.mybatis.converter.CodedTypeTypeAdapter;import lombok.extern.slf4j.Slf4j;import org.reflections.Reflections;import org.reflections.scanners.SubTypesScanner;import org.springframework.http.converter.json.GsonHttpMessageConverter;import java.util.Set;/** * @author tenmao * @since 2017/12/1 */@Slf4jpublic class HttpMessageConverter extends GsonHttpMessageConverter {    public HttpMessageConverter() {        final GsonBuilder builder = new GsonBuilder();        final Reflections reflections = new Reflections("com.tenmao", new SubTypesScanner(true));        final Set allClasses = reflections.getStore().getSubTypesOf(CodedEnum.class.getName());        for (String klass : allClasses) {            try {                final Class aClass = Class.forName(klass);                builder.registerTypeAdapter(aClass, new CodedTypeTypeAdapter<>());            } catch (ClassNotFoundException e) {                log.error("fail to register for gson", e);            }        }        setGson(builder.create());    }}

spring-mvc.xml

                        

完成

实现上述步骤后,只要实现接口CodedEnum的自定义枚举都可以自动转换为其code

"自定义枚举gson的转换"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!

0