zoukankan      html  css  js  c++  java
  • spring Jackson 配置笔记

    配置代码

            // 设置输出时包含属性的风格
            this.findAndRegisterModules();
            this.setSerializationInclusion(JsonInclude.Include.NON_NULL)
    
            // 允许单引号、允许不带引号的字段名称
            this.configure(JsonParser.Feature.ALLOW_SINGLE_QUOTES, true)
            this.configure(JsonParser.Feature.ALLOW_UNQUOTED_FIELD_NAMES, true)
            this.configure(MapperFeature.USE_STD_BEAN_NAMING, true)
    
            this.setVisibility(PropertyAccessor.SETTER, JsonAutoDetect.Visibility.NONE);
            this.setVisibility(PropertyAccessor.GETTER, JsonAutoDetect.Visibility.NONE);
            this.setVisibility(PropertyAccessor.IS_GETTER, JsonAutoDetect.Visibility.NONE);
            this.setVisibility(PropertyAccessor.FIELD, JsonAutoDetect.Visibility.ANY);
    
            this.setDateFormat(SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));
    
    
            // 设置输入时忽略在JSON字符串中存在但Java对象实际没有的属性
            this.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES)
            // 空值处理为空串
            this.serializerProvider.setNullValueSerializer(object : JsonSerializer<Any>() {
                @Throws(IOException::class, JsonProcessingException::class)
                override fun serialize(value: Any, jgen: JsonGenerator,
                                       provider: SerializerProvider) {
                    jgen.writeString("")
                }
            })
            // 设置时区
            this.setTimeZone(TimeZone.getDefault())//getTimeZone("GMT+8:00")
    

    config 常用配置枚举

    SerializationFeature

    • WRITE_DATES_AS_TIMESTAMPS
    • WRITE_DATE_KEYS_AS_TIMESTAMPS
    • WRITE_DATES_WITH_ZONE_ID
    • WRITE_DURATIONS_AS_TIMESTAMPS
    • WRITE_CHAR_ARRAYS_AS_JSON_ARRAYS
    • WRITE_ENUMS_USING_TO_STRING
    • WRITE_ENUMS_USING_INDEX
    • WRITE_NULL_MAP_VALUES
    • WRITE_EMPTY_JSON_ARRAYS
    • WRITE_SINGLE_ELEM_ARRAYS_UNWRAPPED
    • WRITE_BIGDECIMAL_AS_PLAIN
    • WRITE_DATE_TIMESTAMPS_AS_NANOSECONDS

    MapperFeature

    • USE_STATIC_TYPING
    • USE_STD_BEAN_NAMING

    DeserializationFeature

    • USE_BIG_DECIMAL_FOR_FLOATS
    • USE_BIG_INTEGER_FOR_INTS
    • USE_LONG_FOR_INTS
    • ACCEPT_SINGLE_VALUE_AS_ARRAY
    • UNWRAP_SINGLE_VALUE_ARRAYS
    • ACCEPT_EMPTY_STRING_AS_NULL_OBJECT
    • ACCEPT_EMPTY_ARRAY_AS_NULL_OBJECT
    • ACCEPT_FLOAT_AS_INT
    • READ_ENUMS_USING_TO_STRING
    • READ_UNKNOWN_ENUM_VALUES_AS_NULL
    • READ_UNKNOWN_ENUM_VALUES_USING_DEFAULT_VALUE
    • READ_DATE_TIMESTAMPS_AS_NANOSECONDS
    • ADJUST_DATES_TO_CONTEXT_TIME_ZONE

    常用配置解释

    • setVisibility 可以设置Key的方式

    • MapperFeature.USE_STD_BEAN_NAMING 直接输出原始的字段名。

    /.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.9.5/jackson-databind-2.9.5-sources.jar!/com/fasterxml/jackson/databind/util/BeanUtil.java

    /**
         * @since 2.5
         */
        public static String okNameForMutator(AnnotatedMethod am, String prefix,
                boolean stdNaming) {
            String name = am.getName();
            if (name.startsWith(prefix)) {
                return stdNaming
                        ? stdManglePropertyName(name, prefix.length())
                        : legacyManglePropertyName(name, prefix.length());
            }
            return null;
        }
    

    stdManglePropertyName 就是原始输出。
    legacyManglePropertyName 就是规范输出。

  • 相关阅读:
    centos yum 安装nginx 后增加模块
    mysql 设置不了短串密码怎么办 You must reset your password using ALTER USER statement before executing this statement.
    Centos7 安装mysql后登录提示:Access denied for user 'root'@'localhost'
    mysql安装历程
    yum.rpm,repo源
    MySql-Server和MySql-Client的关系
    阿里云JKD镜像
    关于字符编码
    Dockerfile编写制作centos7.7+php5.6+nginx镜像
    PHP中常见日期、月份、时间戳列表(strtotime、date、mktime的用法)
  • 原文地址:https://www.cnblogs.com/newsea/p/9703956.html
Copyright © 2011-2022 走看看