0

編集: これは PUT でも発生しているようです。

spring-data-rest-webmvc バージョン 2.1.0.BUILD-SNAPSHOT を使用すると、既存のリソースを指す関係を持つリソースを POST できないことがわかりました。参照をインスタンス化する必要がある 2 つのエンティティがあり、それらのエンドポイントのいずれかに POST すると、以下の動作が発生します。

参照を必要としないリソースの POST はうまく機能します。

少し掘り下げたところ、うまくいったようですが、型を逆シリアル化できるかどうかを確認しているPersistentEntityResourceHandlerMethodArgumentResolverときMappingJackson2HttpMessageConverterに例外がスローされます。ObjectMapper例外の原因はNullPointerException.

/reservation との関係を含む POST の例:

{ "description" : "test_post", "dateMade" : "2014-03-03T08:04:44.293-0600", "timeLastChanged" : null, "userLastChanged" : null, "courseTypeId" : null, "numCredits" : null, "instructor" : null, "numParticipants" : null, "reservationType" : "MCU", "status" : "REQUESTED", "abstract" : null, "requestor" : "http://localhost:8080/users/2", "submitter" : "http://localhost:8080/users/2", "conferences" : [] }

応答:

{ cause: null message: "No suitable HttpMessageConverter found to read request body into object of type class domain.Reservation from request with content type of application/json!" }

/roomGroups と関係のない POST:

{ "description" : "All Rooms", "isOffNetwork" : false, "roomGroupType" : "STANDARD" }

応答:

201 Created

私が投稿しているJSONに何か問題がありますObjectMapperか? 何らかの回避策はありますか?これは、2.0.0.RC1 で、JSON に参照リンクを含めるためのわずかに異なるスキームを使用して機能していました。Jackson の依存関係のバージョンは同じままであるように見えるため、この問題の原因は何なのだろうか...

助けてくれてありがとう!

アップデート:

この問題は現在、関連付けられているエンティティとは無関係のようです...

@Entity次のように新しい ConnectionRequest を作成しました。

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "CONNECTION_REQUEST_ID")
private Long id;

@Column(name = "FROM_ENTITY_ID", nullable = false)
private Long fromId;

@Column(name = "TO_ENTITY_ID", nullable = false)
private Long toId;

@Convert(converter = EntityTypeConverter.class)
@Column(name = "FROM_ENTITY_TYPE_ID", nullable = false)
private EntityType fromType;

@Convert(converter = EntityTypeConverter.class)
@Column(name = "TO_ENTITY_TYPE_ID", nullable = false)
private EntityType toType;

@ManyToOne(fetch = FetchType.EAGER, cascade = {CascadeType.MERGE})
@JoinColumn(name = "CONFERENCE_ID", nullable = false)
private Conference conference;

json に Conference リレーションが含まれている新しい ConnectionRequest レコードを POST でき{"conference" : ".../conferences/1"}ます。

@Entityただし、この予約で同じ例外が引き続き発生します。

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "RESERVATION_ID")
private Long id;

@Column(name = "DESCRIPTION", length = 50, nullable = false)
private String description;

@Temporal(TemporalType.TIMESTAMP)
@Column(name = "DATE_MADE", nullable = false)
private Date dateMade;  

@Temporal(TemporalType.TIMESTAMP)
@Column(name = "TIME_LAST_CHANGED")
private Date timeLastChanged;

@Column(name = "USER_LAST_CHANGED")
private Integer userLastChanged; // TODO why is this an int?

@Column(name = "ABSTRACT", length = 2000)
private String _abstract;

@Column(name = "COURSE_TYPE_ID")
private Integer courseTypeId;

@Column(name = "NUMBER_OF_CREDITS")
private Integer numCredits;

@Column(name = "INSTRUCTOR", length = 255)
private String instructor;

@Column(name = "NUMBER_OF_PARTICIPANTS")
private Integer numParticipants;

@Convert(converter = ReservationTypeConverter.class)
@Column(name = "RESERVATION_TYPE_ID", nullable = false)
private ReservationType reservationType;

@Convert(converter = StatusConverter.class)
@Column(name = "STATUS_ID") 
private Status status;

@ManyToOne(fetch = FetchType.EAGER, cascade = {CascadeType.MERGE})
@JoinColumn(name="REQUESTOR_USER_ID", nullable=false)
private User requestor;

@ManyToOne(fetch = FetchType.EAGER, cascade = {CascadeType.MERGE})
@JoinColumn(name="SUBMITTER_USER_ID", nullable=false)
private User submitter;

@OneToMany(fetch = FetchType.LAZY, mappedBy = "reservation", cascade = {CascadeType.REMOVE})
private Set<Conference> conferences = new HashSet<>();

このクラスの何が特別なのか、物事がうまくいかない原因になっているのかわかりません...

4

1 に答える 1