Java
 Computer >> コンピューター >  >> プログラミング >> Java

JavaでJacksonを使用して@JsonManagedReferenceおよび@JsonBackReferenceアノテーションを使用する場合


@JsonManagedReference および@JsonBackReference アノテーション 双方向でJSON構造を作成するために使用できます 仕方。 @JsonManagedReference アノテーションはフォワードリファレンスです これには、シリアル化プロセス中も含まれますが、 @JsonBackReference アノテーションは後方参照です シリアル化プロセス中に省略されます。

以下の例では、@JsonManagedReferenceおよび@JsonBackReferenceアノテーションを実装できます。

import java.util.*;
import com.fasterxml.jackson.annotation.JsonManagedReference;
import com.fasterxml.jackson.annotation.JsonBackReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.core.JsonProcessingException;
public class ManagedReferenceBackReferenceTest {
   public static void main(String args[]) throws JsonProcessingException {
      BackReferenceBeanTest testBean = new BackReferenceBeanTest(110, "Sai Chaitanya");
      ManagedReferenceBeanTest bean = new ManagedReferenceBeanTest(135, "Adithya Ram", testBean);
      testBean.addEmployees(bean);
      ObjectMapper mapper = new ObjectMapper();
      String jsonString = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(bean);
      System.out.println(jsonString);
   }
}
class ManagedReferenceBeanTest {
   public int empId = 115;
   public String empName = "Raja Ramesh";
   @JsonManagedReference
   public BackReferenceBeanTest manager;
   public ManagedReferenceBeanTest(int empId, String empName, BackReferenceBeanTest manager) {
      this.empId = empId;
      this.empName = empName;
      this.manager = manager;
   }
}
class BackReferenceBeanTest {
   public int empId = 125;
   public String empName = "Jai Dev";
   @JsonBackReference
   public List<ManagedReferenceBeanTest> list;
   public BackReferenceBeanTest(int empId, String empName) {
      this.empId = empId;
      this.empName = empName;
      list = new ArrayList<ManagedReferenceBeanTest>();
   }
   public void addEmployees(ManagedReferenceBeanTest managedReferenceBeanTest) {
      list.add(managedReferenceBeanTest);
   }
}

出力

{
   "empId" : 135,
   "empName" : "Adithya Ram",
   "manager" : {
      "empId" : 110,
      "empName" : "Sai Chaitanya"
   }
}

  1. 抽象クラスを使用する場合とJavaでインターフェイスを使用する場合

    インターフェイスはコントラクトの動作を定義するために使用でき、2つのシステム間のコントラクトとして機能して相互作用することもできますが、抽象クラスは主にサブクラスのデフォルトの動作を定義するために使用されます。つまり、すべての子クラスが同じ機能を実行する必要があります。 抽象クラスを使用する場合 抽象クラスは、派生クラスに共通の基本クラスの実装を提供するため、継承の概念を使用している場合に適しています。 非公開メンバーを宣言する場合は、抽象クラスも適しています。インターフェイスでは、すべてのメソッドがパブリックである必要があります。 将来、新しいメソッドを追加したい場合は、抽象クラスの方が

  2. Javaの抽象メソッドとクラス

    はい。 Javaで抽象メソッド/クラスを非常に簡単に作成できます。 例 抽象クラスを作成するには、クラス宣言で、classキーワードの前にabstractキーワードを使用するだけです。 /* File name : Employee.java */ public abstract class Employee {    private String name; private String address;    private int number; public Employee(String name, String address, int