Mapowanie jsona na dwie encje.

0

Hej, mam problem którego sam nie potrafię rozwiązać.
Załóżmy że mam encję która wygląda tak:

    public class User {

    public User() {}

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id",unique = true)
    private int id;
    @Column(name = "name")
    private String name;
    @Column(name = "surname")
    private String surname;
    @Column(name = "email", unique = true)
    private String email;

    //getters

    // setters
}

Mapuję sobie takiego jsona:

 {
"email":"[email protected]",
"name":"Name",
"surname":"surname"
}

za pomocą:

@POST
@Path("register")
@Consumes("application/json")
@Produces("application/json")
public Response UserRegistration(User UserData)
{


}

Jak zmapować takiego jsona:

 {
"email":"[email protected]",
"name":"Name",
"surname":"surname"
"reqData":{
    "ip":44.44.44.44}
}

na dwie encje ?
tzn. druga encja:

public class RegistrationData {

    public RegistrationData(){};

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id", unique = true)
    private int id;
    @Column(name = "ip")
    private int ip;

Struktura jsona może się oczywiście zmienić na potrzeby, ale chciałbym żeby request automatycznie był mapowany na dwie encje.

0

Tak to tylko w erze panie. JSON jest sposobem zapisu obiektów ORAZ zależności pomiędzy nimi. Zatem nie można w ramach jednego obiektu JSON trzymać informacji o wielu NIEZALEŻNYCH obiektach tak by AUTOMATYCZNIE mapować je na obiekty w Javie. Masz dwie opcje:

  1. Napisać własny parser by ten potrafił wybrać sobie z Requestu dane i odpowiednio je poukładać w konkretne obiekty.
  2. Napisać wrapper na tego JSONa tak by request był mapowany na jeden obiekt. Dopiero z niego wybierać odpowiednie obiekty.
0

Json którego pokazałeś wyraźnie wskazuje że w klasie user powinien być atrybut regDate typu RegistrationData wówczas powinno się wszystko zamapować jak należy. Jeżeli to mają być osobne i niezależne obiekty to powinieneś stworzyć wrapper w którym są atrybuty user i regData do niego dostosować strukturę json.

0

Wpadłem na taki sam pomysł jak radziliście.

tzn.

 {
   "user":{
      "email":"[email protected]",
      "name":"xxxx",
      "surname":"fffff"
   },
   "reqData":{
      "ip":"1223123"
   }
}
public class Testclass {

    public Testclass(){};

    // getters 

    //setters
    private User user;

    private RegistrationData reqData;
}

Działa bardzo fajnie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1