0

为了在 Java 中实现 REST API,我使用: - Jersey JAX-RS 框架 - Genson 解析器 - Tomcat8 服务器 - Hibernate

我在服务类中有这个方法:

@POST
@Consumes("application/json")
public Response createUser(Users user) {
    UsersDAO u = new UsersDAO();

    if(user.getLogin() == null || user.getPasswd() == null)
        return Response.status(Response.Status.BAD_REQUEST).entity("Missing information").build();
    try{
        u.addUser(user);
    }catch(HibernateException e){
        return Response.status(Response.Status.BAD_REQUEST).entity("User already exists").build();
    }
    return Response.status(Response.Status.CREATED).build();
}

Users班级:

public class Users implements Serializable {

    @Basic(optional = false)
    @Column(name = "passwd")
    private String passwd;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = "iduser")
    private Integer idUser;

    @Basic(optional = false)
    @Column(name = "login")
    private String login;

    @JoinColumn(name = "idusersgroup", referencedColumnName = "idusersgroup")
    @ManyToOne(optional = true)
    private UsersGroups idUsersGroup;

    @Transient
    private int idGroup;

    .
    .
    .
}

如您所见,我创建该idGroup字段只是为了存储相关对象的 id UsersGroups,所以如果我想在创建用户的那一刻添加组,我只需将其 id 包含在 JSON 中而不是UsersGroups对象(关系是可选的,用户可以属于或不属于某个组)。问题是 GensonUsers在使用 JSON 时没有将此字段添加到对象中:

{
"login": "admin1",
"passwd": "12345",
"idgroup": 3
} 

如果我发布这个 JSON 然后访问user.getIdGroup(),它返回 0,所以我假设该idGroup字段没有被使用。注释@Transient是否与此问题有关?关于如何解决它的任何想法?如果问题是 Genson 并且有任何使用另一个 JSON 解析器(如 Jackson)的解决方案,我可以考虑切换

4

1 回答 1

0

问题是,在 json 中,您的 idgroup 为小写,而类中的属性为大写 G。还要确保您有 getter 和 setter,或者将 Genson 配置为使用私有属性(您可以在文档)。

BTW genson 不知道休眠注释。

于 2017-03-11T06:20:07.733 回答