Возникают проблемы с решением возникшего исключения 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 ...
Не лучше ли попытаться преобразовать свойство значения в стандартное java.util.Map?
Это выглядиткак довольно простое использование API, я здесь что-то упускаю?
Вот моя установка ObjectMapper для JsonJackson:
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());