У меня возникла проблема после обновления jackson-core и jackson привязки данных с версии 2.9.2 до 2.10.1. Некоторые тесты, которые работали до этого, больше не работают, и я хотел бы узнать, сталкивался ли кто-то с такой проблемой раньше , У меня есть этот тест:
@Test
public void compareSerializedDeserializedObject() throws JSONException {
JsonUtil jsonUtil = new JsonUtil();
User user = new User(1, "foobar@example.com", "password");
String serializedUser = jsonUtil.toJson(user);
User deserialziedUser = jsonUtil.fromJson(serializedUser, User.class);
assertEquals(user, deserialziedUser);
}
тестирование этого кода:
private static final ObjectMapper OBJECT_MAPPER = Mapper.INSTANCE.getObjectMapper();
@NotNull
public String toJson(@Null Object object) {
try {
return object == null ? "null" : OBJECT_MAPPER.writeValueAsString(object);
} catch (JsonProcessingException e) {
throw new RuntimeException(e);
}
}
public <T> T fromJson(@NotNull String json, @NotNull Type type) {
JavaType javaType = OBJECT_MAPPER.constructType(type);
try {
return OBJECT_MAPPER.readValue(json, javaType);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
вот мое перечисление объектного преобразователя:
public enum Mapper {
INSTANCE;
private final ObjectMapper objectMapper = new ObjectMapper();
Mapper(){
objectMapper.setVisibility(PropertyAccessor.FIELD, JsonAutoDetect.Visibility.ANY);
}
public ObjectMapper getObjectMapper() {
return objectMapper;
}
}
Выдает ошибку:
expected: <bean.User@5a789f12> but was: <bean.User@6f4d549a>
Имеет смысл, что тест не пройден, потому что эти объекты разные.
Что не имеет смысла для меня, так это то, почему, когда я использовал Джексон 2.9.2 и использовал объектный сопоставитель как ниже, тот же тест работает?
private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper();
@NotNull
public String toJson(@Null Object object) {
try {
return object == null ? "null" : OBJECT_MAPPER.writeValueAsString(object);
} catch (JsonProcessingException e) {
throw new RuntimeException(e);
}
}
public <T> T fromJson(@NotNull String json, @NotNull Type type) {
JavaType javaType = OBJECT_MAPPER.constructType(type);
try {
return OBJECT_MAPPER.readValue(json, javaType);
} catch (IOException e) {
throw new RuntimeException(e);
}
}