1

crud操作用のspringboot REST APIの開発を開始しました。しかし、POSTリクエストにはいくつか問題があります。マネージ型/バックリファレンス「defaultReference」を処理できません:マネージ型と互換性のないバックリファレンス型(java.util.List)

私は仕事

@Entity 
@Table(name="JOB") 
public class Job { 

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

@Column(name="JOB_CODE") 
private String jobCode; 

@Column(name="JOB_DESCRIPTION") 
private String jobDescription; 

@OneToMany(mappedBy="job") 
@JsonManagedReference(value="tasks") 
private List<JobTask> taskList = new ArrayList<>(); 

呼び出さエンティティを持っている私は、サイクルの参照を避けるために@JsonManagedReferenceと@JsonBackReference注釈を使用していることに注意してください。

これはJobTask`

@Entity 
@Table(name="JOB_TASK") 
public class JobTask { 

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

private String taskDescription; 

@ManyToOne 
@JoinColumn(name="JOB_ID") 
@JsonBackReference(value="tasks") 
private Job job;` 

が、私はしかし、今、私はPOST requests`の例外の下に取得しています JSON`

以下
{ 
"jobCode": "QM", 
"jobDescription": "Quaterly Maintenance", 
"taskList": [ 
{ 
    "taskDescription": "Quarter Engine Asess" 
}, 
{ 
     "taskDescription": "Quarter Break Asess" 
} 
]` 
} 

でジョブを作成するにはPOSTリクエストをしようとした私の子要素であります

[[シンプルタイプ、クラスcom.abc.entity.Job]]タイプのジャーナルの逆シリアル化を評価することができませんでした:java.lang.IllegalArgumentException:マネージ/バックリファレンス ' defaultReference ':マネージ型(com.abc.entity.JobTask) `

と互換性のないバック参照型(java.util.Listには)私は、このサイトにさがすを行なったし、いくつかの推奨事項が@JsonIdentityInfo の代わりに使用することが分かっ@ JsonManagedReference/@JsonBackReferenceアノテーションしかし、@ JsonIdentityInfoを使用したくないのは、GETリクエストを使用してDataを読み取ったときに完全直列化オブジェクトではなくId値を返すためです。

すべてのヘルプは深く

おかげで、 Keth

答えて

0

私はあなたが使うべきだと思うのは理解されるであろうようなSerializableを実装しています。あなたはここに代を追加するためのcontrolerを見つける

@Entity 
    @Table(name="JOB_TASK") 
    public class JobTask implements Serializable { 
    } 

    @Entity 
    @Table(name="JOB") 
    public class Job implements Serializable { 
    } 

を見てこの例:

@RestController 
    @RequestMapping("/pays") 
    public class PaysController { 
     @Autowired 
     IManagerPays iManagerPays; 

     @RequestMapping(method = RequestMethod.POST) 
     public Pays addPays(@RequestBody Pays pays) { 
      return iManagerPays.addPays(pays); 
     } 
    } 

    @Service 
    public class ManagerPays implements IManagerPays { 
     @Autowired 
     private RepositoryPays repositorypays; 

     @Override 
     public Pays addPays(Pays pays) { 

      return repositorypays.save(pays); 
     } 
    } 

    @Entity 
    @Table(name="ctr_pays") 
    public class Pays { 
     @Id 
      @GeneratedValue 
     private Integer idPays; 
     private String nomPays; 
     @OneToMany(mappedBy="pays") 
     private List<Ville> villes; 
     public Pays(){ 

     } 
    //getter and setter 
    } 

この例はうまく動作します。

+0

こんにちは@Mohamed Elgarnaoui、感謝のために応答します。私はこれと幸運を試みた。ところで、SerializableインターフェイスとJackson De-Serialize機能を実装することの背後にある理論は何ですか? – keth

+0

@kethは編集ポストを参照してください。plz – Mohamed

関連する問題