2014-06-12 374 views
2

我使用Jersey來提供REST API。 我寫控制器,它映射的請求實體:Java將json映射到兩個對象

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


} 

它工作正常的簡單的JSON,如:

{ 
"email":"[email protected]", 
"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 protected]", 
"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; 

我當然一一對應的關係,但在這裏並不重要(我認爲)。 我希望我的問題可以理解。 感謝您的幫助。

回答

0

我做到了!我不得不修改我的json請求並創建額外的類。

它對我很好。 我認爲framewrok將做到這一點對我來說:<

新JSON:

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

映射:(將返回 「[email protected]」)

@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; 
}