Dans mon projet, j'ai 2 entités. Enquête et entrées à enquêter. Ils sont en relation un à plusieurs (thare peut être plusieurs entrées à une enquête). Spring Data Rest & Lombok - Exception lors de l'ajout d'une relation d'ajout
@NoArgsConstructor
@AllArgsConstructor
@Getter
@Setter
@Entity
@Table(name = "survey_entries")
@TypeDef(name = "SurveyEntry", typeClass = SurveyEntry.class)
public class SurveyEntryEntity extends AbstractEntity {
@ManyToOne
@JoinColumn(name = "survey_id")
private SurveyEntity survey;
@NonNull
@Type(type = "SurveyEntry")
@Column(name = "responses")
// JSON db column type mapped to custom type
private SurveyEntry responses;
}
@NoArgsConstructor
@AllArgsConstructor
@Getter
@Setter
@Entity
@Table(name = "surveys")
@TypeDef(name = "Survey", typeClass = Survey.class)
public class SurveyEntity extends AbstractEntity {
@NonNull
@Type(type = "Survey")
@Column(name = "template")
// JSON db column type mapped to custom type
private Survey survey;
@OneToMany(mappedBy = "survey")
private List<SurveyEntryEntity> entries;
}
J'ai également créé 2 dépôts de repos à l'aide de repos de données Spring:
@RepositoryRestResource(collectionResourceRel = "survey_entries", path = "survey-entries")
public interface SurveyEntryRepository extends PagingAndSortingRepository<SurveyEntryEntity, Long> {
}
@RepositoryRestResource(collectionResourceRel = "surveys", path = "surveys")
public interface SurveyRepository extends PagingAndSortingRepository<SurveyEntity,Long> {
}
J'ai enquête ajouté avec succès par la demande reste POST et je peux accéder entrées (actuellement vide) en envoyant GET à /api/surveys/1/entries
. Maintenant je veux ajouter l'entrée à l'enquête existante. Et tandis que je peux l'ajouter en envoyant POST (contenu ci-dessous) à /api/survey-entries
j'ai des problèmes en l'ajoutant directement comme une référence à l'enquête. J'utilise la méthode POST avec le même contenu et l'adresse /api/surveys/1/entries
. Ce qui est intéressant, je reçois NullPointerException dans les journaux et l'entrée n'est pas insérée mais l'horodatage de modification d'audit dans l'enquête est modifié. Qu'est-ce que je fais mal? Ai-je manqué la même configuration? Ou devrais-je utiliser un contenu différent?
Contenu du POST avec l'entrée:
{
"responses": {
"question1": "response1",
"question2": "response2",
"question3": "response3"
}
}
Contenu du POST enquête:
{
"survey": {
//survey structure
}
}
Exception:
08:41:14.730 [http-nio-8080-exec-3] DEBUG org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod - Failed to resolve argument 1 of type 'org.springframework.data.rest.webmvc.PersistentEntityResource'
org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: No content to map due to end-of-input; nested exception is com.fasterxml.jackson.databind.exc.MismatchedInputException: No content to map due to end-of-input
Caused by: com.fasterxml.jackson.databind.exc.MismatchedInputException: No content to map due to end-of-input
@EDIT
J'ai essayé d'ajouter l'entrée par la poste à /api/survey-entries
avec application/hal + JSON 'en-tête Content-Type et le contenu comme ci-dessous, mais maintenant je reçois autre exception:
Contenu:
{
"survey" : "http://localhost:8080/api/surveys/1",
"responses": {
"question1": "response1",
"question2": "response2",
"question3": "response3"
}
}
Exception:
Caused by: com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot construct instance of `com.domain.SurveyEntity` (although at least one Creator exists): no String-argument constructor/factory method to deserialize from String value ('http://localhost:8080/api/surveys/1')
at [Source: (org.apache.catalina.connector.CoyoteInputStream); line: 1, column: 41] (through reference chain: com.domain.SurveyEntryEntity["survey"])
@EDIT 2
Ajouté Lombok annotations présentes o n Entité de classe
Afficher vos charges utiles de toutes les demandes, plz – Cepr0
J'ai ajouté le corps de POST avec enquête, mais ça fonctionne très bien, donc je ne pense pas que cela a quelque chose à voir avec mon problème. – Dcortez
Voir ma réponse dans un autre sujet: https://stackoverflow.com/a/46025434 – Cepr0