Thymeleaf模板ajax报错 ThymeleafView IllegalStateException: getOutputStream() has already

今天新写了个方法报了这个奇怪的错。后台正常查到数据,但是前端拿不到。

 

Thymeleaf模板ajax报错 ThymeleafView IllegalStateException: getOutputStream() has already_第1张图片

之前有过这个错误,但是由于时间的原因没有细究,改了dao.xml文件的一个属性就正常了。具体可看那次经历

https://blog.csdn.net/yao8513277/article/details/81034511

今天又遇见这个问题,觉得不能这么简单的放过去了,于是就决定搞定它。

通过报错名称就能知道哪里错了

web容器生成的servlet代码中有out.write(""),response.getOutputStream()产生冲突.即Servlet规范说明,
不能既调用response.getOutputStream(),又调用response.getWriter(),无论先调用哪一个,在调用第二个时候应会抛出IllegalStateException。

在调用第一个之后,调用第二个之前,添加

out.clear(); 
out = pageContext.pushBody();

但是我这不是jsp啊,原生的html文件,哪来的代码。。。想来想去只能是Thymeleaf模板里面或者其他地方有内置的流操作,没法直接操作了。那么就只能从返回结果上入手了。

之前用的是springmvc 的@ResposeBody标签直接干,简单省事,现在需要换一种方式了,这里我使用了HttpServletResponse 返回结果,详情看下面代码。

    @RequestMapping("/machineList")
    public void machineList(HttpServletResponse response, AdvertisementMachine advertisementMachine, ModelMap modelMap){
        User user=(User)modelMap.get("loginUser");
        int userID = user.getId();
        advertisementMachine.setUserID(userID);
        List machineGroupList = machineService.findAllMachine(advertisementMachine);
        String jsonResult = JSON.toJSONString(machineGroupList);
        renderData(response, jsonResult);
    }

    private void renderData(HttpServletResponse response, String data) {
        PrintWriter printWriter = null;
        try {
            printWriter = response.getWriter();
            printWriter.print(data);
        } catch (IOException ex) {
            Logger.getLogger(MachineGroupController.class.getName()).log(Level.SEVERE, null, ex);
        } finally {
            if (null != printWriter) {
                printWriter.flush();
                printWriter.close();
            }
        }
    }

 

至此前端可以拿到数据了

$.ajax({
            url:url,
            dataType:"json",
            type:"post",
            success:function (data,status) {
                console.log(data)
            },error:function () {
                console.log(456)
            }
});

 

收工~

你可能感兴趣的:(springmvc,前端js)