精华内容
下载资源
问答
  • fastjson替代
    2021-04-09 13:17:56

    spring boot 配置 fastjson 替代 Jackson (并解决返回字符串带双引号问题)

    参考文章:

    (1)spring boot 配置 fastjson 替代 Jackson (并解决返回字符串带双引号问题)

    (2)https://www.cnblogs.com/fqybzhangji/p/10315167.html

    (3)https://www.javazxz.com/thread-990-1-1.html


    备忘一下。


    更多相关内容
  • 用了几种方式尝试解决无效,得知后台是用的fastjson,于是使用fastjson替代。 因为很多地方都是使用的是Gson,所以只处理了有影响的地方。 使用 fastjson 导入依赖 implementation 'com.alibaba:fastjson:1.2.9' ...

    Gson将map转为json,如果map里有Integer值,那么会将Integer转为Double

    用了几种方式尝试解决无效,得知后台是用的fastjson,于是使用fastjson替代。

    因为很多地方都是使用的是Gson,所以只处理了有影响的地方。

    使用 fastjson

    导入依赖

    implementation 'com.alibaba:fastjson:1.2.9'

    混淆

    # fastjson
    -dontwarn com.alibaba.fastjson.**
    -keep class com.alibaba.fastjson.**{*;}
    
    # 忽略泛型
    -keepattributes Signature
    
    #保持所有实现 Serializable 接口的类成员
    #保持 Serializable 不被混淆
    -keepnames class * implements java.io.Serializable
    -keepclassmembers class * implements java.io.Serializable {
        static final long serialVersionUID;
            private static final java.io.ObjectStreamField[] serialPersistentFields;
            !static !transient <fields>;
            !private <fields>;
            !private <methods>;
            private void writeObject(java.io.ObjectOutputStream);
            private void readObject(java.io.ObjectInputStream);
            java.lang.Object writeReplace();
            java.lang.Object readResolve();
    }
    

    打release包时出现了OOM,在gradle.properties里加上:

    # 增加内存分配大小
    org.gradle.jvmargs=-Xmx1024m
    

    使用

    将map转为json:JSON.toJSONString(resultMap)

    使用后就好了。。怎么解决Gson自身的问题没时间去细究了。
    如果有完美的解决方式请甩上链接~

    展开全文
  • 最安全做法使用bean替代默认转换器方法 @Configuration public class MyConfiguration { /** * 配置消息转换器 * new HttpMessageConverters(true, converters); * 一定要设为true才能替换否则不会替换 * ...

    最安全做法使用bean替代默认转换器方法

    @Configuration
    public class MyConfiguration {
        
        /**
         * 配置消息转换器
         * new HttpMessageConverters(true, converters); 
         * 一定要设为true才能替换否则不会替换
         * @return 返回一个消息转换的bean
         */
      	@Bean
    	public HttpMessageConverters fastJsonMessageConverters() {
    		List<HttpMessageConverter<?>> converters = new ArrayList<>();
    		//需要定义一个convert转换消息的对象;
    		FastJsonHttpMessageConverter fastConverter = new FastJsonHttpMessageConverter();
    		//添加fastJson的配置信息;
    		FastJsonConfig fastJsonConfig = new FastJsonConfig();
    		fastJsonConfig.setSerializerFeatures(SerializerFeature.PrettyFormat);
    		//全局时间配置
    		fastJsonConfig.setDateFormat("yyyy-MM-dd HH:mm:ss");
    		fastJsonConfig.setCharset(Charset.forName("UTF-8"));
    		//处理中文乱码问题
    		List<MediaType> fastMediaTypes = new ArrayList<>();
    		fastMediaTypes.add(MediaType.APPLICATION_JSON_UTF8);
    		//在convert中添加配置信息.
    		fastConverter.setSupportedMediaTypes(fastMediaTypes);
    		fastConverter.setFastJsonConfig(fastJsonConfig);
    		converters.add(0,fastConverter);
    		return new HttpMessageConverters(converters);
    	}

    第二种做法

    实现WebMvcConfigurer,需要将顺序改为0,或者比jackson前面就可以了

    @Configuration
    public class SpringMvcConfigure implements WebMvcConfiguration{
    
        /**
         * 配置消息转换器
         * @param converters
         */
        @Override
        public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
           //需要定义一个convert转换消息的对象;
            FastJsonHttpMessageConverter fastConverter = new FastJsonHttpMessageConverter();
            //添加fastJson的配置信息;
            FastJsonConfig fastJsonConfig = new FastJsonConfig();
            fastJsonConfig.setSerializerFeatures(SerializerFeature.PrettyFormat);
            //全局时间配置
            fastJsonConfig.setDateFormat("yyyy-MM-dd HH:mm:ss");
            fastJsonConfig.setCharset(Charset.forName("UTF-8"));
            //处理中文乱码问题
            List<MediaType> fastMediaTypes = new ArrayList<>();
            fastMediaTypes.add(MediaType.APPLICATION_JSON_UTF8);
            //在convert中添加配置信息.
            fastConverter.setSupportedMediaTypes(fastMediaTypes);
            fastConverter.setFastJsonConfig(fastJsonConfig);
            converters.add(0,fastConverter);
        }
    }

    第三种实现父类,缺点很明显,完全接管的springmvc,默认配置全部失效,需要重新自己配置

    @Configuration
    public class SpringMvcConfigure extends WebMvcConfigurationSupport{
    
        /**
         * 配置消息转换器
         * @param converters
         */
        @Override
       protected void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
            //需要定义一个convert转换消息的对象;
            FastJsonHttpMessageConverter fastConverter = new FastJsonHttpMessageConverter();
            //添加fastJson的配置信息;
            FastJsonConfig fastJsonConfig = new FastJsonConfig();
            fastJsonConfig.setSerializerFeatures(SerializerFeature.PrettyFormat);
            //全局时间配置
            fastJsonConfig.setDateFormat("yyyy-MM-dd HH:mm:ss");
            fastJsonConfig.setCharset(Charset.forName("UTF-8"));
            //处理中文乱码问题
            List<MediaType> fastMediaTypes = new ArrayList<>();
            fastMediaTypes.add(MediaType.APPLICATION_JSON_UTF8);
            //在convert中添加配置信息.
            fastConverter.setSupportedMediaTypes(fastMediaTypes);
            fastConverter.setFastJsonConfig(fastJsonConfig);
            converters.add(fastConverter);
            super.configureMessageConverters(converters);
        }
        /*
         * 
         *重写静态路径
         * @parm registry 配置源
         */
         @Override
        public void addResourceHandlers(ResourceHandlerRegistry registry) {
            registry.addResourceHandler("/**")
                    .addResourceLocations("classpath:/static/");
        }
    }

    注意:没重新的会失效,默认配置会被这个完全代替。

    参考附录

    https://docshome.gitbooks.io/springboot/content/pages/spring-boot-features.html#boot-features-spring-mvc-auto-configuration

    https://blog.csdn.net/bluuusea/article/details/79665440

    https://segmentfault.com/a/1190000015975405

    https://github.com/spring-projects/spring-boot/issues/12389

    https://www.cnblogs.com/soul-wonder/p/9052422.html

    https://docs.spring.io/spring-boot/docs/2.1.6.RELEASE/reference/htmlsingle/#howto-customize-the-responsebody-rendering

    展开全文
  • 因各种漏洞,弃用fastjson import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.DeserializationFeature; ...

    因各种漏洞,弃用fastjson

    import com.fasterxml.jackson.core.JsonProcessingException;
    import com.fasterxml.jackson.core.type.TypeReference;
    import com.fasterxml.jackson.databind.DeserializationFeature;
    import com.fasterxml.jackson.databind.ObjectMapper;
    import com.fasterxml.jackson.databind.node.ObjectNode;
    import com.xtech.hello.server.common.cons.CommonErrorCons;
    import com.xtech.hello.server.common.starter.exception.HelloException;
    import org.apache.commons.lang3.StringUtils;
    import org.springframework.http.HttpStatus;
    
    import java.lang.reflect.Field;
    import java.util.HashMap;
    import java.util.Map;
    
    
    public class JsonUtils {
    
        private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper()
                .configure(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY, true);
    
        /**
         * 转json字符串
         * @param obj:
         * @return java.lang.String
         */
        public static String toJsonString(Object obj) throws JsonProcessingException {
            if (obj == null) {
                return null;
            }
            return OBJECT_MAPPER.writeValueAsString(obj);
        }
    
        /**
         * json转bean
         * @param json:
         * @param tTypeReference:
         * @return T
         */
        public static <T> T jsonStrToJavaBean(String json, TypeReference<T> tTypeReference) throws JsonProcessingException {
            if (StringUtils.isBlank(json)) {
                return null;
            }
            if (tTypeReference == null) {
                throw new HelloException(CommonErrorCons.UNKNOWN_ERROR_MSG, null, HttpStatus.INTERNAL_SERVER_ERROR, CommonErrorCons.UNKNOWN_ERROR);
            }
            return OBJECT_MAPPER.readValue(json, tTypeReference);
        }
    
        /**
         * 获取ObjectMapper
         * @return com.fasterxml.jackson.databind.ObjectMapper
         */
        public static ObjectMapper getObjectMapper(){
            return OBJECT_MAPPER;
        }
    
        /**
         * 构建ObjectNode
         * @return com.fasterxml.jackson.databind.node.ObjectNode
         */
        public static ObjectNode createObjectNode(){
            return OBJECT_MAPPER.createObjectNode();
        }
    
        /**
         * 对象转Map
         * @param object
         * @return
         */
        public static Map beanToMap(Object object) throws IllegalAccessException {
            Map<String, Object> map = new HashMap<String, Object>();
            Field[] fields = object.getClass().getDeclaredFields();
            for (Field field : fields) {
                field.setAccessible(true);
                map.put(field.getName(), field.get(object));
            }
            return map;
        }
    
        public static <T> T jsonToBean(String json,Class<T> bean) throws JsonProcessingException {
            if(StringUtils.isBlank(json)){
                return null;
            }
            return OBJECT_MAPPER.readValue(json, bean);
        };
    }
    

    展开全文
  • 这么做的主要的原因是公司受够了fastjson频繁的安全漏洞问题,每一次出现漏洞都要推一次全公司的fastjson强制版本升级,很令公司头疼。 文章的前半部分,我会简单分析各种json解析框架的优劣,并给出企业级项目迁移...
  • springBoot之FastJson替换

    2021-05-16 20:43:14
    springBoot替换内嵌的jackJson为FastJson,首先导入jar <!-- =======================Gradle================================ --> // https://mvnrepository.com/artifact/com.alibaba/fastjson ...
  • springboot 使用fastjson替代默认jackson(踩坑路) 方法一:最安全做法使用bean替代默认转换器方法 //写法一 @Configuration public class MyConfiguration { @Bean public HttpMessageConverters ...
  • 来源:cnblogs.com/larva-zhh/p/11544317.html为什么要替换fastjson工程里大量使用了fastjson作为序列化和反序列化框架,甚至ORM在处理部分字...
  • 但日常开发中,最常用的只有四个:Gson、Jackson、org.json 和阿里巴巴的 fastjson。下面我们来简单地对比下。 02、Gson Gson 是谷歌提供的一个开源库,可以将 Java 对象序列化为 JSON 字符串,同样可以将 JSON ...
  • fastjson虽然快但常常出现bug.
  • Fastjson 1.2.80 及之前版本使用黑白名单用于防御反序列化漏洞,经研究该防御策略在特定条件下可绕过默认 autoType 关闭限制,攻击远程服务器,风险影响较大。建议 Fastjson 用户尽快采取安全措施保障系统安全
  • FastJsonHttpMessageConverter fastJsonHttpMessageConverter = new FastJsonHttpMessageConverter(); StringHttpMessageConverter stringHttpMessageConverter = new StringHttpMessageConverter(); ...
  • 记一次因为fastjson替换为gson是引发的血案 有一次客户提了一个要求替换项目中的fastjson具体原因是fastjson有很多漏洞,客户要求用谷歌的gson来替换,一开始没多想以为很简单就直接替换对应的方法json的序列化和反...
  • 我们目前是使用的是hutool,fastjson版本低于1.2.80版本均有远程漏洞问题,这些问题fastjson也有提出,具体参考: security_update_20220523 · alibaba/fastjson Wiki · GitHub 但我们是直接使用的hutool,hutool...
  • spring-mvc.xml&lt;mvc:annotation-driven&gt; &...-- 配置Fastjson支持 --&gt; &lt;ref bean="jsonHttpMessageConverter" /&gt; &lt;/mvc:message-con
  • Jackson代替FastJson

    2022-04-26 20:09:16
    } 方法: // 序列化 类比 fastJson的JSONObject.toJSONString ObjectMapper objectMapper = new ObjectMapper(); String res = objectMapper.writeValueAsString(obj); // 反序列化 类比 fastJson的 ObjectMapper ...
  • NULL值处理之 net.sf.json.JSONObject 和 com.alibaba.fastjson.JSONObject区别 JSON作为一个轻量级的文本数据交换格式常常用于web后台的数据封装和传输。JSON及其工具包给开发带来非常多的好处,提高了开发效率。...
  • gson与fastjson

    2022-07-23 11:32:49
    关于json,我在代码里,最常用的有两个地方,一个是做类型转换的时候...从速度上来说,fastjson是比gson快的,我们的服务目前来说,还没有到考虑性能的时候,所以目前从fastjson切换到gson,先暂时不解决性能问题。...
  • springboot引入fastjson解析枚举类型

    千次阅读 2021-11-03 14:01:41
    springboot引入fastjson解析枚举类型的方法
  • FastJson2JsonRedisSerializer<T> implements RedisSerializer { public static final Charset DEFAULT_CHARSET = Charset.forName( " UTF-8 " ); private Class clazz; public FastJson2...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,593
精华内容 1,437
关键字:

fastjson替代