Genson没有使用@Transient注释的Hibernate POJO字段

时间:2017-03-10 12:08:48

标签: java json hibernate jersey genson

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

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

@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字段只是为了存储与UsersGroups对象相关的ID,所以如果我想在创建用户的那一刻添加该组,我就是ll只需要在JSON中包含它的id而不是UsersGroups对象(关系是可选的,用户可以属于某个组或不属于某个组)。问题是Genson在使用JSON时没有将此字段添加到Users对象:

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

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

1 个答案:

答案 0 :(得分:0)

问题是在json中你有idgroup的小写,而类中的属性是大写的G.同时确保你有getter和setter或者配置Genson使用私有属性(你可以找到一些)文档中的示例。

BTW genson不知道hibernate注释。