服务器返回JSONObjtect数据,前段收到的却是HTML

本文介绍了一个关于在Java Web应用中正确返回JSON数据的问题及解决方案。初始设置中,控制器方法试图返回一个JSONObject,但实际返回的是HTML内容。通过调整响应类型为application/json,并使用PrintWriter输出JSON字符串,成功解决了问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

(1)MVC的controller中

@RequestMapping(value="/alarm",method=RequestMethod.GET)
    public JSONObject  alarmSystem(@RequestParam Integer factoryId){
            Map<String, Object> alarmMap = factoryService.getAlarmInfoByFactoryId(factoryId);
            new ModelAndView().setViewName("alarm");//跳转到arlarm.jsp
            JSONObject jsonObject = new JSONObject();
            jsonObject.put("alarmMapJson",alarmMap);//将map封装成json数据
            System.out.println("jsonObject数据:"+jsonObject.toString());
        return jsonObject;
    }

这里写图片描述

控制台输出的jsonObjtect

{"alarmMapJson":{"alarm1_name":"TAL1203","factory_id":1,"alarm1_content":"TI1203低报警","alarm2_name":"TAH1203","alarm2_content":"TI1203高报警","alarm_url":"kf0001"}}

(2)alarm.jsp

<body onload="refresh()">
<script type="text/javascript">
    function refresh(){
            $.ajax({
                url: "${pageContext.request.contextPath}/alarm.html?factoryId=1",
                type: 'get',
                success: function (data) {
                    alert(data);
                },
                error:function () {
                    console.log("发送请求失败");
                }
            }); 
    }
</script>

结果给我返回html
这里写图片描述

加了个dataType:’json’,
这里写图片描述

消息头状态码200,说明ajax发送状态正常,但是返回的数据不是json数据,所以执行error的回调函数。
这里写图片描述

(3)得出结论:我以为服务器返回的jsonObject对象是json数据,实际上是我太傻,根本不是json数据,而是HTML文档。

(4)所以我要做的就是返回在controller中返回真正的json数据

(5)服务器利用向页面输出application/json类型的数据

@RequestMapping(value="/alarm",method=RequestMethod.POST)
    public void alarmSystem(HttpServletResponse response){
        log.info("正在处理alarm页面传来的ajax请求");
        response.setCharacterEncoding("UTF-8");  
        response.setContentType("application/json; charset=utf-8");  
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("alarmMap",factoryService.getAlarmInfoByFactoryId(1));
        System.out.println("jsonObject数据为:"+jsonObject.toString());
        PrintWriter out = null;  
        try {  
            out = response.getWriter();  
            out.println(jsonObject.toString());  
            out.flush();
        } catch (IOException e) {  
            e.printStackTrace();  
        } finally {  
            if (out != null) {  
                out.close();  
            }  
        }  
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值