Java 有没有一种方法可以让jackson只对抓取的延迟加载对象进行jsonize
我知道这一定在很多地方都有报道。但我找不到一个地方可以用一种简单的方式覆盖它 在控制器中,当我返回person对象时,Jackson尝试序列化大小写。我不需要把病例表送到这里。我可以做person.setCase(null),但我认为一定有更好的方法。有没有办法告诉Jackson,如果这个案子还没有拿到,就不要序列化 我有一堆Pojo,有一对多的关系,就像这些由hbopojogen创建的关系Java 有没有一种方法可以让jackson只对抓取的延迟加载对象进行jsonize,java,json,spring,lazy-loading,jackson,Java,Json,Spring,Lazy Loading,Jackson,我知道这一定在很多地方都有报道。但我找不到一个地方可以用一种简单的方式覆盖它 在控制器中,当我返回person对象时,Jackson尝试序列化大小写。我不需要把病例表送到这里。我可以做person.setCase(null),但我认为一定有更好的方法。有没有办法告诉Jackson,如果这个案子还没有拿到,就不要序列化 我有一堆Pojo,有一对多的关系,就像这些由hbopojogen创建的关系 @OneToMany( fetch = FetchType.LAZY, cascade = { Casc
@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;
}
@OneToMany(fetch=FetchType.LAZY,cascade={CascadeType.PERSIST,CascadeType.MERGE},mappedBy=“person”)
@org.hibernate.annotations.Cascade({org.hibernate.annotations.CascadeType.SAVE_UPDATE})
@列(nullable=false)
@JsonManagedReference
公共集getCase(){
归还这个箱子;
}
@manytone(cascade={CascadeType.PERSIST,CascadeType.MERGE},fetch=FetchType.LAZY)
@org.hibernate.annotations.Cascade({org.hibernate.annotations.CascadeType.SAVE_UPDATE})
@JoinColumn(name=“PERSON\u ID”,nullable=true)
@JsonBackReference
公众人物{
把这个人还给我;
}
public@responseBy Person searchPersonByCode(@RequestParam String codeString){
int code=Integer.parseInt(代码字符串);
患者个人=此.personDao.getByCode(代码);
返回人;
}
谢谢,我不会直接回答你的问题。相反,我将试图说服你改变你认为可能/应该采取的方式
您的问题是,您希望防止在未显式获取案例时将其序列化。我猜当Jackson序列化您的对象时,您会遇到LazyInitializationException。不要试图避免这个问题,请试着思考以下两种解决方案之一不是更好的:
解决方案1:使“在视图中打开会话”。杰克逊将永远能够连载“案例”。
解决方案2:用@JsonIgnore注释“case”
无论你做什么,都要保持一致,不要试图让你的应用程序在特殊情况下以不同的方式工作。它将在设计中引入非显而易见性,并使应用程序更难维护
干杯你退房了吗?Core jackson对特定于lib/framework的特性无能为力,但扩展模块可以做到这一点,而且这一模块特别支持不解析惰性引用的概念。感谢您的回复。我尝试过“开放式会议”。但是我在空豆上得到错误FAIL。但我不明白为什么我不应该按个案来做,因为。有时,我可能需要来自的子表的数据。但并非总是如此。那么,为什么要让杰克逊在不需要的时候跑来跑去呢?谢谢,伙计,这正是我需要的。我一直回避这个问题,因为它看起来太复杂了。但是当我尝试的时候。这很容易。多谢了。是的,没什么复杂的,它只是提供可选功能的一种更模块化的方式。简单的插件,比如浏览器的插件等等。