Ich mache meine Entity-Klassen mit spring-data-rest und spring-data-jpa frei, ohne benutzerdefinierte Controller zu definieren.POST rest entity mit benutzerdefiniertem Argument Konstruktor
@Entity
public class Domain {
@Id
private String domainName;
Domain(String name) {
this.domainName = name;
}
private Domain() { }
}
Say I stackoverflow.com
, eine Domain mit der ID erstellen möchten, was soll ich in der Anfrage Körper passieren?
Angenommen, die Domain Ressource ist am Endpunkt /domains
ausgesetzt. Der Grund, warum ich Einstellung bin zu einem String @Id ist, dass ich eine Domain retrive von GET /domains/{domainName}
-Update in der Lage sein wollen
Wenn eine POST-Anforderung zu senden, wie folgt:
POST /domains
{
"domainName": "stackoverflow.com"
}
ich bekomme die Ausnahme:
JpaSystemException: ids für diese Klasse müssen manuell zugeordnet werden vor dem Aufruf von save(): space .linuxentwickler.Network; verschachtelte Ausnahme ist org.hibernate.id.IdentifierGenerationException: ids für diese Klasse muss manuell vor dem Aufruf von save() zugewiesen werden: space.linuxdeveloper.Network] mit Ursache
Ohne den Konstruktor "public no args" müssen Sie Jacksons "@ JsonCreator" -Anmerkung verwenden, um die Deserialisierung zu verarbeiten. http://www.cowtowncoder.com/blog/archives/2011/07/entry_457.html und https://stackoverflow.com/questions/21920367/why-when-a-constructor-is-annotated-with-jsoncreator- its-arguments-muss-sein-ann –