2

多対多の関係を持つ 2 つのクラス Events と Users があります。

public class Event {

    private int id;

  private List<Users> users;
}

public class User {
        private int id;

      private List<Event> events;
}

@JsonIdentityInfo アノテーションが役立つはずだと読んだことがありますが、この例を見ることはできません。

4

3 に答える 3

5

@JsonIdentityInfo2 つのクラスUserEvent次のように使用できます。

import java.util.List;

import com.fasterxml.jackson.annotation.JsonIdentityInfo;
import com.fasterxml.jackson.annotation.ObjectIdGenerators;

@JsonIdentityInfo(generator = ObjectIdGenerators.UUIDGenerator.class, property="@UUID")
public class User
{
    private int id;
    private List<Event> events;

    // Getters and setters
}

... と

import java.util.List;

import com.fasterxml.jackson.annotation.JsonIdentityInfo;
import com.fasterxml.jackson.annotation.ObjectIdGenerators;

@JsonIdentityInfo(generator = ObjectIdGenerators.UUIDGenerator.class, property="@UUID")
public class Event
{
    private int id;
    private List<User> users;

    // Getters and setters
}

必要に応じて任意の を使用できObjectIdGeneratorます。これで、多対多マッピングに対応するオブジェクトのシリアル化と逆シリアル化が成功します。

public static void main(String[] args) throws IOException
{
    ObjectMapper objectMapper = new ObjectMapper();
    objectMapper.configure(SerializationFeature.INDENT_OUTPUT, true);

    Event event1 = new Event();
    event1.setId(1);
    Event event2 = new Event();
    event2.setId(2);

    User user = new User();
    user.setId(10);

    event1.setUsers(Arrays.asList(user));
    event2.setUsers(Arrays.asList(user));
    user.setEvents(Arrays.asList(event1, event2));

    String json = objectMapper.writeValueAsString(user);
    System.out.println(json);

    User deserializedUser = objectMapper.readValue(json, User.class);
    System.out.println(deserializedUser);
}

お役に立てれば。

于 2013-08-01T17:26:55.630 に答える
1

私は「グーグル」でここに来たので、@Jackallの回答を少し改造して使用することになりました

@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "id")

これは、質問の Event および User クラスのように、私の DTO に「id」というプロパティがあるためです。

于 2014-10-28T14:27:58.753 に答える