Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.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 有没有一种方法可以让jackson只对抓取的延迟加载对象进行jsonize_Java_Json_Spring_Lazy Loading_Jackson - Fatal编程技术网

Java 有没有一种方法可以让jackson只对抓取的延迟加载对象进行jsonize

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

我知道这一定在很多地方都有报道。但我找不到一个地方可以用一种简单的方式覆盖它

在控制器中,当我返回person对象时,Jackson尝试序列化大小写。我不需要把病例表送到这里。我可以做person.setCase(null),但我认为一定有更好的方法。有没有办法告诉Jackson,如果这个案子还没有拿到,就不要序列化

我有一堆Pojo,有一对多的关系,就像这些由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;
    }
@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。但我不明白为什么我不应该按个案来做,因为。有时,我可能需要来自的子表的数据。但并非总是如此。那么,为什么要让杰克逊在不需要的时候跑来跑去呢?谢谢,伙计,这正是我需要的。我一直回避这个问题,因为它看起来太复杂了。但是当我尝试的时候。这很容易。多谢了。是的,没什么复杂的,它只是提供可选功能的一种更模块化的方式。简单的插件,比如浏览器的插件等等。