小大卫 2023-11-23 13:52 采纳率: 0%
浏览 18

spring-mvc的@ResponseBody问题


@RequestMapping(value = "getFilesName",
            produces = "text/html;charset=utf-8")
    @ResponseBody
    public String getFilesName(HttpServletRequest request,
                               HttpServletResponse response) throws Exception {
        //String path = request.getServletContext().getRealPath("/") + "files/files.json";
        String path = request.getServletContext().getRealPath("/files/files.json");
        //response.setContentType("application/json");
        String json = JSONFileUtils.readFile(path);
        System.out.println(json);
        //response.getWriter().print(json);
        return json;
    }

我发现这里的ResponseBody并没有帮我把数据写进response的body区,当我使用response.getWriter().print(json);页面才正常显示,这是为什么呢?

  • 写回答

4条回答 默认 最新

  • 小大卫 2023-11-23 14:10
    关注

    我只有一个猜测:会不会是因为我要会写的数据本身就是JSON格式的,然后导致@ResponseBody没有把数据回写到响应体(body区)。
    下面是我的前端获取数据的代码(使用jQuery):

    $(document).ready(function () {
        const url = "${pageContext.request.contextPath }/getFilesName";
        $.get(url, function (response) {
          console.log("返回结果::"+response);//这部分在浏览器控制台什么都没输出:即使response为空也应该有前面提示信息出现吧?可是什么都没有。
          var files = JSON.parse(response);
          for (let i = 0; i < files.length; i++) {
            $("#files").append("<li>" +
                    "<a href='${pageContext.request.contextPath}/download?filename=" + encodeURIComponent(files[i].name) + "'>" +
                    files[i].name + "</a></li>");
            console.log(files[i].name);
          }
        }).fail(function() {
          console.error("Error in the AJAX request");})//错误信息倒是有,看了一下详细信息,发现是setTimeout(异步),我的猜测应该是错的。
    //还有一条错误信息:GET http://localhost:8080/c13/getFilesName net::ERR_CONTENT_LENGTH_MISMATCH 200 (OK)
      })
    
    

    我的猜测应该是错的,但是不知道是什么问题,我用response.getWriter().print(json);页面是一切正常的。

    评论 编辑记录
  • Huazie 全栈领域优质创作者 2023-11-24 02:01
    关注

    你这里是 text/html , 要求 返回的数据类型是HTML文本,而你返回的是 json字符串
    如果你用 response 直接写,当然是可以的

    评论
  • 皮蛋不吃粥 2023-11-24 03:18
    关注

    @ResponseBody 返回json 但是你的 produces = "text/html;charset=utf-8" 这不是矛盾

    评论
  • CSDN-Ada助手 CSDN-AI 官方账号 2023-11-24 18:07
    关注

    【相关推荐】




    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论
编辑
预览

报告相同问题?

问题事件

  • 创建了问题 11月23日

悬赏问题

  • ¥15 pycharm倒入虚拟环境的时候,显示这个,但是我的虚拟环境已经创建了
  • ¥15 FPGA芯片60进制计数器
  • ¥15 前端js怎么实现word的.doc后缀文件在线预览
  • ¥20 macmin m 4连接iPad
  • ¥15 DBIF_REPO_SQL_ERROR
  • ¥15 根据历年月数据,用Stata预测未来六个月汇率
  • ¥15 DevEco studio开发工具 真机联调找不到手机设备
  • ¥15 请教前后端分离的问题
  • ¥100 冷钱包突然失效,急寻解决方案
  • ¥15 下载honeyd时报错 configure: error: you need to instal a more recent version of libdnet
手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部