Json ошибка сравнения после обновления версии Джексона - PullRequest
0 голосов
/ 15 января 2020

У меня возникла проблема после обновления 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);
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...