Springboot开发遇到的问题

文章讲述了在Springboot项目中,如何解决Ajax请求返回404、跨域问题以及GET请求中的URI解析错误。关键在于调整dataType设置,确保后端使用@ResponseBody将数据转换为JSON,正确处理路径参数并启用跨域访问。
摘要由CSDN通过智能技术生成

项目场景:

Springboot开发后端,前端JS及其框架。


问题描述

返回出现[object Object]

原因分析:

Ajax设置的接收数据格式和后端返回的不匹配,或者Ajax设置的数据格式压根不存在。
ajax的dataType的值有以下常见类型:

  • “xml”: 返回 XML 文档。
  • “html”: 返回纯文本 HTML 信息;
  • “script”: 返回纯文本 JavaScript 代码。
  • “json”: 返回 JSON 数据 。
  • “jsonp”: JSONP 格式。一般是用来处理主流浏览器的跨域数据访问问题。
  • “text”: 返回纯文本字符串。

不可以写Int之类的。

dataType: "text",
success: function (data) {

解决方案:

能用Json返回就用Json。如果只要一个执行后的状态,表示成功与否,那么可以返回text。
后端可以返回Int,会自动转换String,需要加上@ResponseBody。

    @ResponseBody
    @PostMapping("user/changeInfo")
    public int changeInfo(
            @RequestParam("userName") String userName,
            @RequestParam("city") String city,
            @RequestParam("sex") String sex, HttpServletRequest rq) throws IOException {

        HttpSession session = rq.getSession();
        int id = (int) session.getAttribute("id");

        // System.out.println(userName + " " + city + " " + sex + " " + id);

        if (ud.showOneUser(userName) != null) {
            return 1;
        }

        if (ud.updateInfo(userName, city, sex, id) > 0)
            return 0;
        return 2;
    }

问题描述。

Ajax请求数据后,总是进入error内,不进入success,即使请求完全成功。并且浏览器报404 Not Found错误。

原因分析:

Ajax认为没有成功获取数据,请求失败。

解决方案:

必须加上@ResponseBody
@ResponseBody的作用其实是将java对象转为json格式的数据,然后直接写入HTTP response 的body中;一般在异步获取数据时使用。

    @ResponseBody
    @PostMapping("user/changeInfo")
    public int changeInfo()


问题描述。

使用Get请求时,当uri中有?后,总是报404。

原因分析:

可能是后端路由有问题

解决方案:

Springboot中,@GetMapping注解用来解析uri,不能用@PathParam,即路径参数。
下面是错误代码

    @GetMapping("searching/s?keyword={keyword}") // 这是路径参数!!!
    @ResponseBody
    public ModelAndView search(@PathtParam("keyword") @NotBlank String title, HttpServletResponse response) {
        response.addHeader("Access-Control-Allow-Origin", "*");// 允许所有来源访同
        response.addHeader("Access-Control-Allow-Method", "POST,GET");// 允许访问的方式
        ModelAndView mv = new ModelAndView();
        mv.setViewName("search");
        return mv;
    }

这样写,后端解析会出错

下面是正确的,searching/s?xxx=xxx&xxx=xxx会正确响应。

    @GetMapping("searching/s")
    @ResponseBody
    public ModelAndView search(@RequestParam("keyword") @NotBlank String title, HttpServletResponse response) {
        response.addHeader("Access-Control-Allow-Origin", "*");// 允许所有来源访同
        response.addHeader("Access-Control-Allow-Method", "POST,GET");// 允许访问的方式
        ModelAndView mv = new ModelAndView();
        mv.setViewName("search");
        return mv;
    }

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值