私はSpring、Hibernate、およびJPAでJava8を使用しています。RESTfulサービスを呼び出すときのJsonMappingException
私はPerson
オブジェクトを保存RESTfulなサービスがあります。
16:02:
merge
にPerson
オブジェクトをしようとしたとき、私は次のエラーを取得する@RequestMapping(value = "/save", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE) public @ResponseBody ResponseEntity<Person> savePerson(@RequestBody Person person) { try { person = personService.save(person); return new ResponseEntity<Person>(person, HttpStatus.OK); } catch (Exception e) { Person p = null; return new ResponseEntity<Person>(p, HttpStatus.INTERNAL_SERVER_ERROR); } }
を58472は、ORG [ をWARN .springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver] (デフォルトタスク-11)HTTPメッセージの読み取りに失敗しました: org.springframework.http.converter.HttpMessageNotReadableEx ception: ドキュメントを読み取れませんでした:該当なし[ソース: [email protected];行:29、列:3]( 参照チェーン:com.jobs.spring.domain.Person ["blockedPersons"]); ネストされた例外は です。com.fasterxml.jackson.databind.JsonMappingException:N/A [ソース: [email protected];行29、列:3]( 参照チェーンを介し:com.jobs.spring.domain.Person [ "blockedPersons"])
それは "reference chain
" について語っているので、私はいくつかを有していてもよい推測再帰エラー。あるいは何らかの理由でJSONオブジェクトにJavaを解析しようとしています。
誰でも助言できれば、私は助けていただければ幸いです。
さらに詳しい情報:
Person.java
@Entity
@Table(name = "person")
@XmlRootElement(name = "person")
public class Person extends AbstractDomain<Long> {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER, orphanRemoval = true)
@JoinTable(name = "person_blocked", joinColumns = {
@JoinColumn(name = "PER_ID", referencedColumnName = "ID") }, inverseJoinColumns = {
@JoinColumn(name = "BLOCK_ID", referencedColumnName = "ID", unique = true) })
private Set<BlockedPerson> blockedPersons = null;
...
}
BlockedPerson.java
@Entity
@Table(name = "blocked_person")
@XmlRootElement(name = "blocked_person")
public class BlockedPerson extends AbstractDomain<Integer> {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "ID", unique = true, nullable = false)
private Integer id;
@Column(name = "BLOCKED_PER_ID", nullable = false)
private Long blockedPersonId;
@XmlElement
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
@XmlElement
public Long getBlockedPersonId() {
return blockedPersonId;
}
public void setBlockedPersonId(Long blockedPersonId) {
this.blockedPersonId = blockedPersonId;
}
}
あなたは私たちにPersonクラスを示すだろうかどうかは容易になるだろう。 – CrazySabbath
こんにちはクレイジーサバス、返事をありがとう。私は問題の '@ OneToMany'フィールドを上に示す' Person'クラスを持っています。 'ゲッター'と 'セッター'を見せてもらえますか? (この '@ OneToMany'フィールドが追加されたときに初めてこのエラーが発生し始めました)。 – Richard
私の悪い、見逃した太字のテキスト笑。エンティティをコントローラに直接渡していますか?私はそれを避けるだろう。 Personクラスの宣言を表示できますか?そして@RequestBodyプリント?もし私があなただったら、私は他のクラスを作って、同じフィールドを持ち、seraserableを拡張します。そして、それらのクラスをJPAクラスに変換します。 – CrazySabbath