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

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

 

之前有过这个错误,但是由于时间的原因没有细究,改了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<AdvertisementMachine> 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)
            }
});

 

收工~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值