Наличие и проблема с queryRequest в AWS Dynamodb - PullRequest
0 голосов
/ 04 июня 2019

У меня проблема с DynamoDB и QueryRequest.Я хочу реализовать пейджинг с DynamodB.

Я получаю сообщение об ошибке от почтальона.Прокрутите вправо для полной ошибки.

{
"timestamp": "2019-06-04T00:12:42.526+0000",
"status": 500,
"error": "Internal Server Error",
"exception": "com.amazonaws.services.dynamodbv2.model.ResourceNotFoundException",
"message": "Request processing failed; nested exception is com.amazonaws.services.dynamodbv2.model.ResourceNotFoundException: Requested resource not found (Service: AmazonDynamoDBv2; Status Code: 400; Error Code: ResourceNotFoundException; Request ID: TDAUFVG205A11TFDGOD9U53MMBVV4KQNSO5AEMVJF66Q9ASUAAJG)", 

Мой проект подключается и отлично работает с другими приложениями API.DynamoDBMapper.query работает нормально и возвращает данные.

Проблема в новом коде, использующем QueryRequest.

public String getRequestPage(String query,  String lastEvaluatedKey, String limit) {

...
Map<String, AttributeValue> mapLastEvaluatedKey = null;

Map<String,String> expressionAttributesNames = new HashMap<>();
expressionAttributesNames.put("#tagId","tagId");

Map<String,AttributeValue> expressionAttributeValues = new HashMap<>();
expressionAttributeValues.put(":column_search",new AttributeValue().withS(query));

QueryRequest queryRequest = new QueryRequest()
  .withTableName(dynamoDbTableName)
  .withKeyConditionExpression("#tagId = :column_search") 
  .withExpressionAttributeNames(expressionAttributesNames)
  .withExpressionAttributeValues(expressionAttributeValues)
  .withLimit(page_limit)
  .withExclusiveStartKey(mapLastEvaluatedKey);

System.out.println(" queryRequest " + queryRequest  );

QueryResult queryResult = client.query(queryRequest);

Map<String, AttributeValue> mapLastEvaluatedKeyReturned = null;
mapLastEvaluatedKeyReturned = queryResult.getLastEvaluatedKey();


  error -->{ "timestamp": "2019-06-04T19:58:18.156+0000", "status": 500, 
  "error": "Internal Server Error", "exception": 
   "com.amazonaws.services.dynamodbv2.model.ResourceNotFoundException", 
   "message": "Request processing failed; nested exception is 
    com.amazonaws.services.dynamodbv2.model.ResourceNotFoundException: 
    Requested resource not found (Service: AmazonDynamoDBv2; Status Code: 
    400; Error Code: ResourceNotFoundException; Request ID: 
    BRCI1FLM3375SB8U6JSJEAH09NVV4KQNSO5AEMVJF66Q9ASUAAJG)", "path": 
     "/api/v1/metadata/tag/tagIdPage/military_status/page/1/limit/2" } 

Это system.out запроса-запроса и отправляется в БД

  queryRequest {TableName: tagMetadata_Certified-dev,Limit: 
   2,FilterExpression: tagId = :tagIdValue,KeyConditionExpression: #tagId = :tagIdValue,ExpressionAttributeNames: 
   {#tagId=tagId},ExpressionAttributeValues: {:tagIdValue={S: 
   military_status,}}}

Любая помощь будет отличной.

Спасибо, Фил

1 Ответ

0 голосов
/ 12 июня 2019

Я нашел свой выданный с помощью aws cli из окна терминала. Это очень полезно для тестирования с ключом --debug.

Прокрутите вправо для полного кода ...

 aws dynamodb query --table-name tableNameHere  --region regionNameHere --key-condition-expression "tagId = :tagIdValue"  --filter-expression "isReportable = :p" --expression-attribute-values '{":tagIdValue":{"S":"m_status"}, ":p":{"BOOL":true}}' --debug



public String getRequestPage(String tagIdPassed,  String lastEvaluatedKey, String limit) {
.... code removed ...

Boolean isReportableBool = true;

TagMetadata tagMetadata = new TagMetadata();

Map<String,String> expressionAttributesNames = new HashMap<>();
expressionAttributesNames.put("#tagId","tagId");
expressionAttributesNames.put("#isReportable","isReportable");

Map<String,AttributeValue> expressionAttributeValues = new HashMap<>();
expressionAttributeValues.put(":tagIdValue",new AttributeValue().withS(tagIdPassed));
expressionAttributeValues.put(":isReportableValue",new AttributeValue().withBOOL(isReportableBool));

QueryRequest queryRequest = new QueryRequest()
  .withTableName(dynamoDbTableName)
  .withKeyConditionExpression("#tagId = :tagIdValue")
  .withFilterExpression("#isReportable = :isReportableValue")
  .withExpressionAttributeNames(expressionAttributesNames)
  .withExpressionAttributeValues(expressionAttributeValues)
  .withLimit(page_limit);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...