Springboot开发遇到的问题

项目场景:

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;
    }

你可能感兴趣的:(spring,boot,okhttp,后端)