Ich baue eine Spring Boot-Anwendung mit DynamoDB. Ich wollte Spring Data REST hinzufügen. Die Datenschicht funktioniert, aber der REST schlägt beim Zuordnen der Entitäten fehl. Es löst korrekt auf und erstellt den REST-Endpunkt, aber ich bekomme PersistentEntity darf nicht null sein! Nachricht und eine Ausnahme, wenn die REST-API zugreifen:DynamoDB Spring Boot Data Rest "PersistentEntity darf nicht null sein!"
java.lang.IllegalArgumentException: PersistentEntity must not be null!
at org.springframework.util.Assert.notNull(Assert.java:115)
at org.springframework.data.rest.webmvc.PersistentEntityResource$Builder.<init>(PersistentEntityResource.java:140)
at org.springframework.data.rest.webmvc.PersistentEntityResource$Builder.<init>(PersistentEntityResource.java:123)
at org.springframework.data.rest.webmvc.PersistentEntityResource.build(PersistentEntityResource.java:115)
at org.springframework.data.rest.webmvc.PersistentEntityResourceAssembler.wrap(PersistentEntityResourceAssembler.java:74)
at org.springframework.data.rest.webmvc.PersistentEntityResourceAssembler.toResource(PersistentEntityResourceAssembler.java:55)
at org.springframework.data.rest.webmvc.AbstractRepositoryRestController.entitiesToResources(AbstractRepositoryRestController.java:133)
at org.springframework.data.rest.webmvc.AbstractRepositoryRestController.toResources(AbstractRepositoryRestController.java:80)
at org.springframework.data.rest.webmvc.RepositoryEntityController.getCollectionResource(RepositoryEntityController.java:212)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:687)
removed irrelevant parts of the exception
Wenn ich den Code debuggen, sehe ich, dass die entities
in PersistentEntityResourceAssembler
leer. Es bedeutet, dass meine Entitäten nicht registriert waren. Ich schätze, das liegt daran, dass es sich nicht um reguläre JPA-Entitäten handelt und diese nur über die Repositorys mit der Datenschicht verbunden sind.
Wie kann ich Spring über meine Entitäten informieren, damit das Daten-REST-Framework mit DynamoDB funktioniert?
Hier sind relevante Teile von meinem Projekt. Die Dummy-Entität eine Tabelle in dynamo darstellt:
@DynamoDBTable(tableName = "DummyTable")
public class Tester {
@Id
private String id;
@DynamoDBHashKey(attributeName = "id")
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
}
Das Repository:
public interface TesterRepository extends CrudRepository<Tester, String> {
@EnableScan
@Override
Iterable<Tester> findAll();
}
Die Konfigurationsklasse:
@Configuration
@EnableDynamoDBRepositories(basePackages = "com.czequered.promocodes.repository")
public class DynamoDBConfig {
// deleted params
@Bean
public AmazonDynamoDB amazonDynamoDB() {
// deleted the simple initializer, just long code
return amazonDB;
}
}
Und Gradle Abhängigkeiten:
compile 'com.amazonaws:aws-java-sdk-core:1.11.86'
compile 'org.springframework.boot:spring-boot-starter'
compile 'org.springframework.boot:spring-boot-starter-data-rest'
compile 'com.github.derjust:spring-data-dynamodb:4.4.1'
Der Code wurde vereinfacht Der Rest kann in diesem gist with all files needed to build the whole application gefunden werden.
I tried to follow the demo from the original author of the Spring Data DynamoDB library, aber es fügt JPA und Hibernate dem Klassenpfad hinzu, den ich vermeiden möchte, da ich nichts davon benötigen sollte.
Ich habe das gleiche Problem. Hast du die Lösung gefunden? –
@EricZhang Ich habe nicht die Spring-Bibliothek für DynamoDB verwendet. Sie können sehen, was ich in diesem Projekt getan habe: https://github.com/sm4/promo-codes – sm4