Amir Hajimirsadeghi
Amir Hajimirsadeghi

Reputation: 134

How do I Append a string to a list using dynamodb sdk? (Java)

Pretty simple problem, but for some reason there is no correct documentation anywhere. Here is what I am implementing:

public static AttributeValue pushMessage(String ID,String message)
{
    Map<String, AttributeValue> itemKey = mapKey(KEY, new AttributeValue(ID));

    UpdateItemRequest request = new UpdateItemRequest();
    request.setTableName(TABLE_NAME);
    request.setKey(itemKey);
    /*I don't know what to put for the update expression*/
    //request.setUpdateExpression("ADD #"+LIST_NAME+" :append_value)");
    request.setUpdateExpression("list_append("+LIST_NAME+", :append_value)");
    request.setExpressionAttributeValues(Collections.singletonMap(":append_value", new AttributeValue(message)));

    UpdateItemResult result = dynamoDB.updateItem(request);
}

I essentially just want to be able to append strings to a list I have in the items in my DB. I have tried everything the documentations have suggested(so basically 1 example) and numerous threads, but nothing works.

The error I am currently getting is:

Exception in thread "main" com.amazonaws.AmazonServiceException: Invalid UpdateExpression: Syntax error; token: "list_append", near: "list_append(" (Service: AmazonDynamoDBv2; Status Code: 400; Error Code: ValidationException;
at com.amazonaws.http.AmazonHttpClient.handleErrorResponse(AmazonHttpClient.java:1372)
at com.amazonaws.http.AmazonHttpClient.executeOneRequest(AmazonHttpClient.java:919)
at com.amazonaws.http.AmazonHttpClient.executeHelper(AmazonHttpClient.java:697)
at com.amazonaws.http.AmazonHttpClient.doExecute(AmazonHttpClient.java:449)
at com.amazonaws.http.AmazonHttpClient.executeWithTimer(AmazonHttpClient.java:411)
at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:360)
at com.amazonaws.services.dynamodbv2.AmazonDynamoDBClient.doInvoke(AmazonDynamoDBClient.java:2048)
at com.amazonaws.services.dynamodbv2.AmazonDynamoDBClient.invoke(AmazonDynamoDBClient.java:2018)
at com.amazonaws.services.dynamodbv2.AmazonDynamoDBClient.updateItem(AmazonDynamoDBClient.java:1845)
at DBConnector.pushMessage(DBConnector.java:486)
at DBConnector.main(DBConnector.java:506)

Upvotes: 1

Views: 1438

Answers (1)

Alexander Patrikalakis
Alexander Patrikalakis

Reputation: 5205

Use the following UpdateExpression:

String.format("SET %s = list_append(%s, :append_value)", LIST_NAME, LIST_NAME)

Upvotes: 2

Related Questions