Genson 不使用带有 @Transient 注释的 Hibernate POJO 字段
Genson not consuming Hibernate POJO's field annotated with @Transient
为了在 Java 中实现 REST API,我正在使用:
- 泽西岛 JAX-RS 框架
- Genson 解析器
- Tomcat8 服务器
- 休眠
我在服务中有这个方法class:
@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
class:
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,所以如果我想在用户创建时添加组,我只需要将其 id 包含在 JSON 而不是 UsersGroups
对象中(关系是可选的,用户可以属于或不属于某个组)。问题是 Genson 在使用 JSON:
时没有将此字段添加到 Users
对象
{
"login": "admin1",
"passwd": "12345",
"idgroup": 3
}
如果我POST这个JSON然后访问user.getIdGroup()
,它returns0,所以我假设idGroup
字段不是被消耗。 @Transient
注释是否与此问题有关?关于如何解决它的任何想法?如果问题是 Genson 并且有使用另一个 JSON 解析器(如 Jackson)的任何解决方案,我可以考虑一个开关
问题是 json 中的 idgroup 是小写的,而 class 中的 属性 是大写的 G。还要确保你有 getter 和 setter它或将 Genson 配置为使用私有属性(您可以在文档中找到一些示例)。
顺便说一句,genson 不了解休眠注释。
为了在 Java 中实现 REST API,我正在使用: - 泽西岛 JAX-RS 框架 - Genson 解析器 - Tomcat8 服务器 - 休眠
我在服务中有这个方法class:
@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
class:
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,所以如果我想在用户创建时添加组,我只需要将其 id 包含在 JSON 而不是 UsersGroups
对象中(关系是可选的,用户可以属于或不属于某个组)。问题是 Genson 在使用 JSON:
Users
对象
{
"login": "admin1",
"passwd": "12345",
"idgroup": 3
}
如果我POST这个JSON然后访问user.getIdGroup()
,它returns0,所以我假设idGroup
字段不是被消耗。 @Transient
注释是否与此问题有关?关于如何解决它的任何想法?如果问题是 Genson 并且有使用另一个 JSON 解析器(如 Jackson)的任何解决方案,我可以考虑一个开关
问题是 json 中的 idgroup 是小写的,而 class 中的 属性 是大写的 G。还要确保你有 getter 和 setter它或将 Genson 配置为使用私有属性(您可以在文档中找到一些示例)。
顺便说一句,genson 不了解休眠注释。