Ошибка DynamoDB при вставке карты

Я пытаюсь вставить в AWS DynamoDB, я получаю вставку регистра, но получаю ошибку в Java (Eclipse), когда я вставляю, но повторяю, я вижу таблицу в DynamoDB моя вставка.

Я получаю ошибку ->

com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMappingException: Aricle[ID_TABLE]: null or empty value for primary key
    at com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapperFieldModel.unconvert(DynamoDBMapperFieldModel.java:171)
    at com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapper$ValueUpdate.apply(DynamoDBMapper.java:1440)
    at com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapper$SaveObjectHandler.execute(DynamoDBMapper.java:746)
    at com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapper.save(DynamoDBMapper.java:622)
    at com.amazonaws.services.dynamodbv2.datamodeling.AbstractDynamoDBMapper.save(AbstractDynamoDBMapper.java:113)
    at org.socialsignin.spring.data.dynamodb.core.DynamoDBTemplate.save(DynamoDBTemplate.java:136)
    at org.socialsignin.spring.data.dynamodb.repository.support.SimpleDynamoDBCrudRepository.save(SimpleDynamoDBCrudRepository.java:130)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

Мой класс Java

@DynamoDBTable(tableName = "ARTICLE")
public class Article{

    @Id
    private String ID_TABLE;

    private String description;

public Article() {
    }

public Article(String description) {
     this.description=description;
    }

@DynamoDBHashKey(attributeName = "ID_TABLE")
    @DynamoDBAutoGeneratedKey
    public String getID_TABLE() {
        return ID_TABLE;
    }

@DynamoDBAttribute(attributeName = "Description")
    public String getDescription() {
        return description;
    }
}

Я загружаю это с нулевым или пустым значением для первичного ключа, НО я получаю @DynamoDBAutoGeneratedKey ...

Я отправляю с помощью Angular объект Article с:

export class Article{
    id: string;
    description: string;
}

  let newParam: Article= {
            id: '', 
            description: 'chair' 
    };

Теперь я понимаю, как я отправляю '', @DynamoDBAutoGeneratedKey не запускается, потому что я пытался с

let newParam: Article= {
                id: null, 

И я получаю ошибку null

com.amazonaws.services.dynamodbv2.model.AmazonDynamoDBException: null (Service: AmazonDynamoDBv2; Status Code: 407; Error Code: null; Request ID: null)

Затем, если я отправил объект в SpringBoot из Angular, И этому объекту необходимо объявить идентификатор Angular, а объект из Springboot получит этот объект, как мне сгенерировать ключ?

Редактировать с новыми данными.

Я получаю объект

контроллер:

@RequestMapping(method = RequestMethod.POST, value = "/addParam", produces = MediaType.APPLICATION_JSON_VALUE)
    public MyMessage addParam(@RequestBody Article article) {
         try {
            pgRepository.save(article);
            result = true;
        } catch (Exception e) {
            e.printStackTrace();
        }
}

репозиторий:

public interface Article Repository extends CrudRepository<Article , String> {
}

Можете ли вы поделиться кодом, который вы использовали для синтаксического анализа и сохранения объекта?

Shivang Agarwal 02.08.2018 13:33
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
1
534
1

Ответы 1

После добавления аннотации @DynamoDBAutoGeneratedKey, которая автоматически генерирует хэш-ключ или свойство ключа диапазона, модель сохраняемости объекта будет генерировать случайный UUID при сохранении этих атрибутов. Только свойства String могут быть помечены как автоматически сгенерированные ключи.

This key will be null till until you call the save method to save it in the database. When you call the save then API will generate a UUID and save in the database also set the same into your object.

Фрагмент кода будет:

public static void saveItem() {
   Article obj = new Article();
   obj.setDescription("abc123");
   // ID_TABLE field is null at this point      
   DynamoDBMapper mapper = new DynamoDBMapper(dynamoDBClient);
   mapper.save(obj);
   // ID_TABLE field will have a value at this point 
   System.out.println("Object was saved with id " + obj.getID_TABLE());

}

Надеюсь, это поможет.

Но я отправляю значение «id» из Angular.

EduBw 02.08.2018 13:45

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

Shivang Agarwal 02.08.2018 13:50

отправьте только это: let newParam: Article = {description: 'Chair'};

Shivang Agarwal 02.08.2018 13:53

Я не могу удалить из своего запроса, потому что мне нужен этот ввод в Angular5

EduBw 02.08.2018 13:54

Затем установите для него значение null.

Shivang Agarwal 02.08.2018 13:58

DynamoDBMapper mapper = новый DynamoDBMapper (DynamoDBClient); DynamoDBclient? моя объектная статья?

EduBw 02.08.2018 14:02

Это клиентский объект, подключенный к базе данных. см .: docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/‌…

Shivang Agarwal 02.08.2018 14:07

нулевое или пустое значение для первичного ключа

EduBw 02.08.2018 14:12

Должен быть нулевым, а не пустым. Оба имеют разные значения.

Shivang Agarwal 02.08.2018 14:17

Привет, Шиванг Агарвал, я отправляю var id = null из Angular, затем SpringBoot получает этот объект с id = null, я использую extends CRUD для сохранения этого объекта, вы используете mapper. Если я отправлю null или «Мой CRUD ВСТАВЬТЕ объект, НО я получаю ошибку. Благодарю.

EduBw 02.08.2018 15:03

Приложил сюда свой весенний код. используя для сохранения объекта.

Shivang Agarwal 02.08.2018 15:15

Я нашел решение, которое мне нужно setID_TABLE () XD

EduBw 03.08.2018 12:43

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