javascript - org.springframework.web.util.NestedServletException : Handler dispatch failed; nested exception is java. lang.StackOverflowError

标签 javascript java spring datatables

我不明白我收到的这个错误,它变得非常令人沮丧...我正在尝试使用 DataTables 显示具有 oneToMany 关系的表中的数据,这是数据显示在view 是通过将关系设置为空,这样上面的错误就会消失,但我不知道如何根据需要显示数据。提前致谢。

在用户中:

@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 ,并将 Controller 的最后一行更改为:

    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;
    

    但后来我需要使用它。

关于javascript - org.springframework.web.util.NestedServletException : Handler dispatch failed; nested exception is java. lang.StackOverflowError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48315173/

相关文章:

javascript - Highcharts 错误 #16 : charts not showing on the same page

javascript - url 中的这个字符串意味着什么#!?

javascript - DIVs点击事件错误触发其他DIVs点击事件

java - 应用程序在后台访问http

java - 为什么我不能在 Eclipse 中新建的 maven webapp 项目中使用 New->Source Folder?

java - "can not get class data for sun/java2d/Disposer"

java - Thymeleaf 没有重定向到index.html

javascript - 如何将带有日期的 JSON 文件加载到 Google Charts

spring - Eclipse 间接引用的 .class 文件

java - Spring MVC上传文件到服务器目录