簡體   English   中英

org.springframework.web.util.NestedServletException:處理程序調度失敗; 嵌套異常是 java.lang.StackOverflowError

[英]org.springframework.web.util.NestedServletException: Handler dispatch failed; nested exception is java.lang.StackOverflowError

我不明白我得到的這個錯誤,它變得非常令人沮喪......我正在嘗試使用 DataTables 來顯示數據從到具有 oneToMany 關系的表,數據在視圖中顯示的唯一方式是將關系設置為空,這樣上面的錯誤就會消失,但我不知道如何根據需要顯示數據。 提前致謝。

在用戶中:

@JoinColumn(name = "id_rol", referencedColumnName = "id_rol", foreignKey = @ForeignKey(name = "fk_di")) 
@ManyToOne(optional = false) 
private Rol rol;

@GetMapping("/users/pag")
@ResponseBody
public String usersPaginate(HttpServletRequest request, HttpServletResponse response) {

    DataTableRequest<User> dataTableInRQ = new DataTableRequest<User>(request);
    PaginationCriteria pagination = dataTableInRQ.getPaginationRequest();

    String baseQuery = "SELECT id_user, username, name, lastname, password, id_rol, (SELECT COUNT(1) FROM user) AS total_records FROM user ORDER BY lastname ASC";
    String paginatedQuery = AppUtil.buildPaginatedQuery(baseQuery, pagination);

    Query query = entityManager.createNativeQuery(paginatedQuery, User.class);

    @SuppressWarnings("unchecked")
    List<User> usersList = query.getResultList();

    /*
    for (int i = 0; i<usersList.size(); i++){
        usersList.get(i).setRol(null);
    }*/

    DataTableResults<User> dataTableResult = new DataTableResults<User>();
    dataTableResult.setDraw(dataTableInRQ.getDraw());
    dataTableResult.setListOfDataObjects(usersList);
    if (!AppUtil.isObjectEmpty(usersList)) {
        dataTableResult.setRecordsTotal(usersList.get(0).getTotalRecords().toString());
        if (dataTableInRQ.getPaginationRequest().isFilterByEmpty()) {
            dataTableResult.setRecordsFiltered(usersList.get(0).getTotalRecords().toString());
        } else {
            dataTableResult.setRecordsFiltered(Integer.toString(usersList.size()));
        }
    }

    return new Gson().toJson(dataTableResult);
}

$(document)
    .ready(
            function() {
                var table = $('#paginatedTable')
                        .DataTable(
                                {
                                    initComplete : function() {
                                        var input = $(
                                                '.dataTables_filter input')
                                                .unbind(), self = this
                                                .api(), $searchButton = $(
                                                '#search')
                                                .click(
                                                        function() {
                                                            self
                                                                    .search(
                                                                            input
                                                                                    .val())
                                                                    .draw();
                                                        })
                                    },
                                    "processing" : true,
                                    "serverSide" : true,
                                    "pageLength" : 10,
                                    "lengthChange" : false,
                                    "columnDefs" : [
                                            {
                                                targets : '_all',
                                                orderable : false
                                            },
                                            {
                                                targets : [ 0, 3, 4, 5, 6 ],
                                                "className" : "text-center"
                                            },
                                            {
                                                targets : [ 3, 4, 5, 6, 7 ],
                                                searchable : false
                                            },
                                            {
                                                targets : [ 6 ],
                                                render : function(data,
                                                        type, row) {
                                                    return data == true ? 'Habilitado'
                                                            : 'Deshabilitado'
                                                }
                                            },
                                            {
                                                targets : [ 4 ],
                                                render : function(data,
                                                        type, row) {
                                                    return moment(data)
                                                            .format(
                                                                    "DD/MM/YYYY");
                                                }
                                            },
                                            {
                                                targets : [ 7 ],
                                                data : "idUser",
                                                render : function(data,
                                                        type, row, meta) {
                                                    return '<div class="btn-group"><a href="/users/ed/'
                                                            + data
                                                            + '"><img class="btnEdit" src="/images/edit.png"></a></div>';
                                                }
                                            } ],
                                    "ajax" : {
                                        "url" : "/users/pag",
                                        "data" : function(data) {
                                        }
                                    },
                                    "columns" : [ {
                                        "data" : "username"
                                    }, {
                                        "data" : "lastname"
                                    }, {
                                        "data" : "name"
                                    }, {
                                        "data" : "rol.tipoRol",
                                        render : function(data, type, row) {
                                            return data || '';
                                        }
                                    }]
                                });
            });

   org.springframework.web.util.NestedServletException: Handler dispatch failed; nested exception is java.lang.StackOverflowError
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:982) ~[spring-webmvc-4.3.10.RELEASE.jar:4.3.10.RELEASE]
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:901) ~[spring-webmvc-4.3.10.RELEASE.jar:4.3.10.RELEASE]
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970) [spring-webmvc-4.3.10.RELEASE.jar:4.3.10.RELEASE]
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861) [spring-webmvc-4.3.10.RELEASE.jar:4.3.10.RELEASE]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:635) [tomcat-embed-core-8.5.16.jar:8.5.16]
2018-01-18 00:00:11.508 ERROR 9160 --- [nio-8091-exec-6] o.a.c.c.C.[.[.[/].[dispatcherServlet]    : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Handler dispatch failed; nested exception is java.lang.StackOverflowError] with root cause

java.lang.StackOverflowError: null
at java.util.Calendar.get(Calendar.java:1826) ~[na:1.8.0_144]
at java.text.SimpleDateFormat.subFormat(SimpleDateFormat.java:1119) ~[na:1.8.0_144]
at java.text.SimpleDateFormat.format(SimpleDateFormat.java:966) ~[na:1.8.0_144]
at java.text.SimpleDateFormat.format(SimpleDateFormat.java:936) ~[na:1.8.0_144]
at java.text.DateFormat.format(DateFormat.java:345) ~[na:1.8.0_144]

如果有人對解決方案感興趣:

  1. 我將這個類添加到我的項目GraphAdapterBuilder 中,並將控制器的最后一行更改為:

     GsonBuilder gsonBuilder = new GsonBuilder(); new GraphAdapterBuilder().addType(User.class).registerOn(gsonBuilder); Gson gson = gsonBuilder.create(); return gson;

    這樣我就得到了這個 Json,以及所有需要的信息:

     {"draw":"1","recordsFiltered":"3","recordsTotal":"3","data":[{"0x1":{"idUser":3,"username":"grtyg","name":"","lastname":"","totalRecords":3,"rol":{"idRol":2,"rol":"User ad"}}}}]}
  2. 我可以簡單地在 Rol 實體中使用 javax @Transient 注釋,如下所示:

     @Transient @OneToMany(cascade = CascadeType.ALL, mappedBy = "rol") private Set<User> users;

    但后來我需要使用它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM