2017-07-11 6 views
0

私はSpring、Hibernate、およびJPAでJava8を使用しています。RESTfulサービスを呼び出すときのJsonMappingException

私はPersonオブジェクトを保存RESTfulなサービスがあります。

16:02:mergePersonオブジェクトをしようとしたとき、私は次のエラーを取得する

@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; 
    } 

} 
+0

あなたは私たちにPersonクラスを示すだろうかどうかは容易になるだろう。 – CrazySabbath

+0

こんにちはクレイジーサバス、返事をありがとう。私は問題の '@ OneToMany'フィールドを上に示す' Person'クラスを持っています。 'ゲッター'と 'セッター'を見せてもらえますか? (この '@ OneToMany'フィールドが追加されたときに初めてこのエラーが発生し始めました)。 – Richard

+0

私の悪い、見逃した太字のテキスト笑。エンティティをコントローラに直接渡していますか?私はそれを避けるだろう。 Personクラスの宣言を表示できますか?そして@RequestBodyプリント?もし私があなただったら、私は他のクラスを作って、同じフィールドを持ち、seraserableを拡張します。そして、それらのクラスをJPAクラスに変換します。 – CrazySabbath

答えて

0

ソリューション

エラーABOのためのreson私がnullオブジェクトで次のことをしていたPersonのセッターメソッドで例外が発生したためです。

this.blockedPersons.clear(); 

修正:

変更:

private Set<BlockedPerson> blockedPersons = null; 

へ:

​​
関連する問題