Java将json映射到两个对象

时间:2014-06-12 17:26:11

标签: java json hibernate jersey jpa-2.1

我使用Jersey提供REST API。 我写了一个控制器,它将请求映射到实体:

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


}

它适用于简单的json,如:

{
"email":"email@email.pl",
"name":"Name",
"surname":"surname"
}

和实体:

    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
}

如何映射JSON数组,如:

{
"email":"email@email.pl",
"name":"Name",
"surname":"surname"
"reqData":{
    "ip":44.44.44.44}
}

两个人? 第一个实体:用户(如上所示)和实体reqData:

public class RegistrationData {

    public RegistrationData(){};

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

我当然有一对一的关系,但这里并不重要(我认为)。 我希望我的问题是可以理解的。 谢谢你的帮助。

1 个答案:

答案 0 :(得分:0)

我做到了!

我必须修改我的json请求并进行额外的课程。

对我来说效果很好。 我认为framewrok会为我做这件事:<

新JSON:

{
   "user":{
      "email":"email@email.com",
      "name":"xxxx",
      "surname":"fffff"
   },
   "reqData":{
      "ip":"1223123"
   }
}

映射:(将返回" email@email.com")

    @POST
    @Path("test")
    @Consumes("application/json")
    @Produces("application/json")
    public String Test(Test Testclass)
    {
        return Testclass.getUser().getEmail();
    }
}

和班级

public class Testclass {

    public Testclass(){};

    // getters 

    //setters
    private User user;

    private RegistrationData reqData;
}