gpt4 book ai didi

java - ClassNotFoundException : No RObject is found to match class type of org. redisson.RedissonMap 编解码器类型为 org.redisson.codec.JsonJacksonCodec

转载 作者:IT王子 更新时间:2023-10-29 06:12:43 24 4
gpt4 key购买 nike

在解决 LiveObject 引发的异常时遇到问题,我尝试根据 Redisson 测试用例重现有问题的行为。

我重现问题的最少代码是这个测试用例(主要灵感来自 RedissonLiveObjectServiceTest.java):

public class LiveObjectTest {

public static final String TEST_VALUE = "my test value";
public static final Integer TEST_INTEGER = 30;

private RedissonClient redisson;

@BeforeEach
public void beforeEach () {

Config config = new Config();
config.useSingleServer()
.setAddress("http://127.0.0.1:6379");
redisson = Redisson.create(config);
}

@AfterEach
public void afterEach () {

redisson.shutdown();
}

@Test
@DisplayName("Test LiveObject with collection")
public void testLiveObjectMap () {

// Use Live Objects service
RLiveObjectService service = redisson.getLiveObjectService();
service.registerClass(TestREntityWithMap.class);

TestREntityWithMap createdObject = new TestREntityWithMap("testID2");
createdObject = service.persist(createdObject);

RMap<Integer, String> map = redisson.getMap("testMap");
createdObject.setValue(map);

map.put(TEST_INTEGER, TEST_VALUE);

TestREntityWithMap updatedObject = service.get(TestREntityWithMap.class, "testID");

// Fails here to access updatedObject.getValue()
assertEquals(TEST_VALUE, updatedObject.getValue().get(TEST_INTEGER));
}

// Tested class
@REntity
public static class TestREntityWithMap implements Comparable<TestREntityWithMap> {

@RId(generator = UUIDGenerator.class)
private String name;

private Map<Integer, String> value;

public TestREntityWithMap (String name) {

super();
this.name = name;
}

protected TestREntityWithMap () {

super();
}

public String getName () {

return name;
}

public void setName (String name) {

this.name = name;
}

public Map<Integer, String> getValue () {

return value;
}

public void setValue (Map<Integer, String> value) {

this.value = value;
}

@Override
public int compareTo (TestREntityWithMap o) {

return name.compareTo(o.name);
}

}
}

这无法将 RedissonMap 对象转换回 RObject...
它不应该尝试将 value 属性转换为标准 java.util.Map 吗?

这看起来像是 API 的简单用法,我是否遗漏了一些要点?

这是我为 JsonJackson 设置的 ObjectMapper:

ObjectMapper mapper = new ObjectMapper();
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
mapper.configure(MapperFeature.DEFAULT_VIEW_INCLUSION, true);
mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
mapper.disable(DeserializationFeature.ADJUST_DATES_TO_CONTEXT_TIME_ZONE);
mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
mapper.configure(MapperFeature.SORT_PROPERTIES_ALPHABETICALLY, true);
mapper.addMixIn(Throwable.class, JsonJacksonCodec.ThrowableMixIn.class);

mapper.findAndRegisterModules();
mapper.registerModule(new JavaTimeModule());

最佳答案

好的....为了帮助任何人,从 Redisson 3.8.2 切换到 3.9.1 解决了这个错误。API(RTopics、连接方案...)中的一些小变化,但非常值得!

关于java - ClassNotFoundException : No RObject is found to match class type of org. redisson.RedissonMap 编解码器类型为 org.redisson.codec.JsonJacksonCodec,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53449499/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com