【问题标题】:unlimited outputs while trying to access restful web service in spring mvc尝试在spring mvc中访问restful web服务时无限输出
【发布时间】:2016-05-20 11:36:43
【问题描述】:

我在我的项目中使用 spring DAO 和 spring mvc,一旦我尝试访问 在 url 下面我得到了大量的 json 并且在我停止程序之前不会停止。我无法弄清楚这一点,有人可以解释这里发生了什么。

url :- //http://localhost:8080/plans/11/more

//controller 

    @ResponseBody
    @RequestMapping(value="plans/{pid}/more",method=RequestMethod.GET)
    public Travel showMore(@PathVariable int pid ){
        Travel travel = travelRep.findOne(pid);
        return travel;
    }

模型类

public class Travel implements Serializable {

    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)

    private Integer idtravel;

    @OneToMany(cascade = CascadeType.ALL, mappedBy = "idtravel")
    private Set<Travellocation> travellocationSet;

    @OneToMany(cascade = CascadeType.ALL, mappedBy = "idtravel")
    private Set<Transactions> transactionsSet;

    @OneToMany(cascade = CascadeType.ALL, mappedBy = "idtravel")
    private Set<Travelmode> travelmodeSet;
}

//假设模型类中的属性有getter和setter。

【问题讨论】:

    标签: java spring web-services rest spring-mvc


    【解决方案1】:

    travellocationSetidLocation 似乎相互引用。 Spring 会遍历所有的 getter,所以会发生这样的事情:

    idLocation = travellocationSet->getIdLocation();
    travellocationSet = idLocation->getTravellocationSet();
    idLocation = travellocationSet->getIdLocation();
    travellocationSet = idLocation->getTravellocationSet();
    // This will continue forever
    

    一种解决方案是使用数据传输对象模式。基本上,您会将数据复制到一个新对象中,该对象可用于您的查看部分。

    【讨论】:

    • 是的,这就是问题所在。但没有使用另一个对象来保存我在有效变量上设置为空sets 的数据。
    【解决方案2】:

    将内容流式传输到单独的文件中(转储文件) 如果您有足够的内存来了解您要下载的数据有多大,您能否尝试将数据流式传输到文件中

    基本上,您必须继续创建转储文件,解析转储文件并过滤掉必要的数据。

    我不建议使用 DTO 模式,因为您不确定大小有多大,而且如果它超过堆大小,您将收到 OOM 异常。

    我建议通过链接https://www.airpair.com/java/posts/spring-streams-memory-efficiency

    【讨论】:

    • 您的回答非常有用。
    猜你喜欢
    • 2017-05-08
    • 1970-01-01
    • 2011-06-13
    • 1970-01-01
    • 2014-04-20
    • 2014-08-26
    • 2011-10-11
    • 1970-01-01
    • 2012-07-30
    相关资源
    最近更新 更多