我知道这一点已经在许多地方得到了解决。但我找不到一个以简单的方式覆盖它的地方。
在控制器中,当我返回人物时,杰克逊试图序列化案例。我不需要在这里发送案例表。我可以做person.setCase(null)但我认为必须有更好的方法来做到这一点。有没有办法告诉杰克逊如果没有提取,不要序列化案件?
我有一堆具有一对多关系的Pojos,就像hbopojogen创建的那样
@OneToMany( fetch = FetchType.LAZY, cascade = { CascadeType.PERSIST, CascadeType.MERGE }, mappedBy = "person" )
@org.hibernate.annotations.Cascade({org.hibernate.annotations.CascadeType.SAVE_UPDATE})
@Column( nullable = false )
@JsonManagedReference
public Set<Case> getCase() {
return this.case;
}
@ManyToOne( cascade = { CascadeType.PERSIST, CascadeType.MERGE }, fetch = FetchType.LAZY )
@org.hibernate.annotations.Cascade({org.hibernate.annotations.CascadeType.SAVE_UPDATE})
@JoinColumn(name = "PERSON_ID", nullable = true )
@JsonBackReference
public Person getPerson() {
return this.person;
}
public @ResponseBody Person searchPersonByCode(@RequestParam String codeString){
int code = Integer.parseInt(codeString);
Patient person = this.personDao.getByCode(code );
return person;
}
谢谢,
答案 0 :(得分:1)
我不会直接回答你的问题。相反,我会试着说服你改变你认为可能/应该做的方式。
您的问题是,您希望防止在未明确获取的情况下序列化大小写。当杰克逊序列化你的对象时,我猜你得到了LazyInitializationException。而不是试图避免这个问题,请尝试认为下面两个解决方案之一并不是更好:
解决方案1:在视图中进行“打开会话”。杰克逊将能够始终序列化“案例”。
解决方案2:使用@JsonIgnore注释“case”
无论你做什么都试着保持一致,不要试图让你的应用程序在特殊场合有所不同。它会在您的设计中引入非显而易见性,使您的应用程序难以维护。
干杯
答案 1 :(得分:1)
你签出了Jackson Hibernate module吗? Core jackson对lib / framework特有的功能做不了多少,但是扩展模块可以 - 而且这个特别支持不解析延迟引用的概念。