使用jackson 2.1,如何禁用fail_on_empty beans错误消息似乎要我禁用?
我认为这只是世界上最简单的事情,但是现在已经很晚了,我还没能找到一个简单的教程或任何特别明显的教程api.SerializationFactory?为什么他们会让它变得如此不直观,然后使错误信息看起来如此简单?
虽然我做喜欢的错误讯息,我的意思是,它比NPE更好.
我假设有一种方法可以使用注释来实现这一点 - 但我并不热衷于使用它们来完成我正在做的简单工作!
我的工作SpringMVC,Hibernate&JSON但我得到这个错误.
HTTP Status 500 - Could not write JSON: No serializer found for class org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationConfig.SerializationFeature.FAIL_ON_EMPTY_BEANS) )
Run Code Online (Sandbox Code Playgroud)
请检查下面的实体
@Entity
@Table(name="USERS")
public class User {
@Id
@GeneratedValue
@Column(name="USER_ID")
private Integer userId;
@Column(name="USER_FIRST_NAME")
private String firstName;
@Column(name="USER_LAST_NAME")
private String lastName;
@Column(name="USER_MIDDLE_NAME")
private String middleName;
@Column(name="USER_EMAIL_ID")
private String emailId;
@Column(name="USER_PHONE_NO")
private Integer phoneNo;
@Column(name="USER_PASSWORD")
private String password;
@Column(name="USER_CONF_PASSWORD")
private String confPassword;
@Transient
private String token;
@Column(name="USER_CREATED_ON") …Run Code Online (Sandbox Code Playgroud) 我有一个简单的控制器返回一个User对象,这个用户的属性坐标有hibernate属性FetchType.LAZY.
当我尝试获取此用户时,我总是必须加载所有坐标以获取用户对象,否则当Jackson尝试序列化时,用户会抛出异常:
com.fasterxml.jackson.databind.JsonMappingException:无法初始化代理 - 没有会话
这是因为杰克逊试图获取这个未被攻击的对象.这是对象:
public class User{
@OneToMany(fetch = FetchType.LAZY, mappedBy = "user")
@JsonManagedReference("user-coordinate")
private List<Coordinate> coordinates;
}
public class Coordinate {
@ManyToOne
@JoinColumn(name = "user_id", nullable = false)
@JsonBackReference("user-coordinate")
private User user;
}
Run Code Online (Sandbox Code Playgroud)
和控制器:
@RequestMapping(value = "/user/{username}", method=RequestMethod.GET)
public @ResponseBody User getUser(@PathVariable String username) {
User user = userService.getUser(username);
return user;
}
Run Code Online (Sandbox Code Playgroud)
有办法告诉杰克逊不要序列化未被攻击的物体吗?我一直在寻找3年前发布的其他答案实现jackson-hibernate-module.但可能通过新的杰克逊功能可以实现.
我的版本是:
提前致谢.
我正在将 Spring MVC 与 Restful Web 服务(JACKSON)一起使用。我有一个名为 p_project 的表,它有 3 列。id、region_id、名称。region_id 引用区域表。我的实体如代码所示。
@Entity
@XmlRootElement(name="project")
@Table(name = "P_PROJECT")
@NamedQueries( {
@NamedQuery(name = "Project.findAll",
query = "select p from Project p order by lower(p.name)",
hints = {
@QueryHint(name = "org.hibernate.cacheable", value = "true")
}
)
})
public class Project extends AbstractSimpleNameEntity<Integer> implements Serializable
{
private Region region;
private String name;
public Project()
{
super();
}
public Project(Integer id)
{
super(id);
}
public Project(String name)
{
super(name);
}
@Id
@Column(name = "ID")
@GeneratedValue(generator …Run Code Online (Sandbox Code Playgroud)