Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Genson不使用Hibernate POJO';用@Transient注释的s字段_Java_Json_Hibernate_Jersey_Genson - Fatal编程技术网

Java Genson不使用Hibernate POJO';用@Transient注释的s字段

Java Genson不使用Hibernate POJO';用@Transient注释的s字段,java,json,hibernate,jersey,genson,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

为了在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();
}
用户
类:

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,因此如果我想在用户创建时添加组,我只需要在JSON中包含其id,而不是
UsersGroups
对象(关系是可选的,用户可以属于某个组,也可以不属于该组)。问题是Genson在使用JSON时没有将此字段添加到
Users
对象:

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

如果我发布这个JSON,然后访问
user.getIdGroup()
,它返回0,因此我假设
idGroup
字段没有被使用。这个
@Transient
注释是否与这个问题有关?知道如何解决它吗?如果问题是Genson,并且有任何使用另一个JSON解析器的解决方案(像杰克逊),我可以考虑一个开关

问题是JSON中有小写的ID群,而类中的属性是大写的G.,同时也确保它有吸气剂和设置器,或者配置GeSON使用私有属性(你可以在文档中找到几个例子)。
顺便说一句,genson不知道hibernate注释。

我不使用genson,但是如果您已经验证了这确实是genson的一个问题,为什么不将您的问题格式化为这样呢。除去所有杂音,只需使用一个简单的POJO和一些JSON创建一个简单的独立测试用例,甚至JUnit测试用例。关于Jersey或Hibern的任何信息ate是不相关的(只要您已经验证这是Genson问题—这真的不难验证)