Порядок свойств DynamoDBTypeConvertedJson для ключей

Я работаю с DDB, который преобразует элемент с помощью DynamoDBMapper в ключ раздела с помощью DynamoDBTypeConvertedJson.

Так например:

public class TestObject{
   private int id;
   private String name;
}

@DynamoDBTable(tableName = TestTable.TABLE_NAME)
public class DynamoDBTestItem{
   private testObj;

@DynamoDBIndexHashKey(globalSecondaryIndexName = TestTable.TEST_INDEX)
@DynamoDBTypeConvertedJson
public TestObject getTestObject() {
    return testObject;
}

public void setTestObject(TestObject testObj) {
    this.testObj = testObj;
}
}

Похоже, что DynamoDBTypeConvertedJson основан на Jackson JSON, который по умолчанию не сохраняет порядок свойств. Таким образом, мы можем сохранять элементы либо как

{\"id\":7,\"name\":\"ObjName\"} or {\"name\":ObjName,\"id\":\"7\"}

Когда я запрашиваю базу данных, я действительно вижу, что некоторые записи сначала имеют идентификатор, а некоторые - имя.

Теперь, когда я делаю следующее:

DynamoDBTestItem hashKey = new DynamoDBTestItem;
hashKey = new TestObj(7, "ObjName");
            DynamoDBQueryExpression<DynamoDBTestItem> expression = new DynamoDBQueryExpression<DynamoDBTestItem>()
                .withIndexName(TestTable.TEST_INDEX)
                .withHashKeyValues(hashKey)
                .withConsistentRead(false);

Мне любопытно, приведет ли этот запрос к пропущенному попаданию, потому что порядок свойств JSON не был сохранен. Итак, если «id» стоит перед «name» в сохраненной записи, но когда мы переходим к запросу, JSON решает поставить «name» перед «id», приведет ли это к пропущенному запросу?

Кажется, что теоретически это могло бы произойти, но я не видел, чтобы это происходило в этой системе, поэтому мне любопытно. Системе здесь просто везет.

Спасибо

Как сделать HTTP-запрос в Javascript?
Как сделать HTTP-запрос в Javascript?
В JavaScript вы можете сделать HTTP-запрос, используя объект XMLHttpRequest или более новый API fetch. Вот пример для обоих методов:
1
0
407
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

В аннотации @DynamoDBTypeConvertedJson (исходный код) используется Fastxml jackson ObjectMapper, для которого по умолчанию установлено значение сортировать свойства по алфавиту (с некоторыми оговорками, которые упоминаются в связанной документации).

В случае, который вы описали, порядок всегда будет одинаковым, но можно создать случай, когда порядок не согласован.

Другие вопросы по теме