根据上一篇文章的前端升级,我们要对后端进行小修改。

对于前端使用json格式发送过来的数据,我们首先修改LoginController中接收数据的部分,请注意此时我们需要使用实体类进行接收前端的数据,代码如下:

package com.example.newtest.controller;


import com.example.newtest.pojo.user;
import com.example.newtest.service.LoginService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class LoginController {

    @Autowired
    private LoginServiceTest loginService;

    @RequestMapping("/Login")
    public String Login(@RequestBody user user) {
      
        return loginService.login(user.getUsername(),user.getPassword());
    }
}

我们添加了@RequestBody注释,能让后端自动将前端的数据以json格式接收。


但是我们看我们后端的代码,如果登录成功,还是只是返回一些‘ok’,'账号密码不存在'这些字段,不仅不好维护,还很麻烦,所以我们需要一个result类来规定返回的值。这样可以让代码复用性增加,也方便添加其他的功能。

我们在pojo类中,新建一个result类,用来当作服务器返回值的类。

  • 类中我们定义int值code来判断是否登录成功,code=1则成功,code=0为失败。
  • 定义string值message来返回字段名。
  • 定义string值redirectUrl作为重定向链接,向前端返回跳转的网页。

同时我们也可以提前构造一些基础的函数来当作基础返回。比如定义普通的成功登录函数、登录失败函数。下面给出result类的代码,如果明白面向对象理解起来会很快。

package com.example.newtest.pojo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class result {
    private Integer code;
    private String message;
    private String redirectUrl; 

    // 基础返回函数
    public static result sucess(){
        return new result(1, "sucess", "/select.html");
    }

    public static result error(){
        return new result(0, "error", null);
    }

    // 带重定向URL的成功方法
    public static result sucess(String redirectUrl){
        return new result(1, "sucess", redirectUrl);
    }

    // 带自定义消息的成功方法
    public static result sucess(String message, String redirectUrl){
        return new result(1, message, redirectUrl);
    }

    // 带自定义消息的错误方法
    public static result error(String message){
        return new result(0, message, null);
    }
 
}

这里return中会new一个类,其中带着参数,这些参数前面其实都是有字段名的,但是可以省略,他自动会帮你识别添加。不过添加一下也没问题,类似这样:

return new result(code:1, message:"sucess", redirectUrl:"/select.html");

此时我们可以回去看前端的代码的登录是否成功的判断,当时没有讲,现在可以讲了。

if (result.code) {
                // 登录成功,跳转到选择页面
                window.location.href = result.redirectUrl;
            } else {
                // 登录失败,显示错误信息
                showError(result.message || '登录失败,请检查用户名和密码');
            }

我们很清晰看到result.code,result.redirectUrl,result.message这三个是对应你后端返回的result类的字段名的,此时就可以串联起来了。


我们现在有了result返回类,就可以前往更改LogingService中return值,belike:

@Service
public class LoginService {
    @Autowired
    private LoginMapper loginMapper;


    public result login(String username, String password) {
        try {
            List<user> users = loginMapper.getUserByUsername(username);
            if (users == null || users.isEmpty())
            {
                return result.error();
            }
            user user = users.get(0);

            if (password.equals(user.getPassword()))
            {
                return result.sucess();
            }
            else  {
                return result.error();
            }
        } catch (Exception e) {
            return result.error();
        }
    }

}

此时我们更改了return中返回的东西,记得引入import com.example.newtest.pojo.result;此时代码看起来就好很多了。由于返回值变成了result类,那么我们LoginService和LoginController函数同时也要改成result类!

注意上面的代码:public result login(String username, String password)

此时我们回去更改LoginController

package com.example.newtest.controller;


import com.example.newtest.pojo.user;
import com.example.newtest.service.LoginService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class LoginController {

    @Autowired
    private LoginServiceTest loginService;

    @RequestMapping("/Login")
    public result Login(@RequestBody user user) {
      
        return loginService.login(user.getUsername(),user.getPassword());
    }
}

将我们的String改为reuslt类,这样所有工作都已经完成了,此时最基础的框架已经完全搭建完毕,接下来将是功能扩展的内容,可喜可贺可喜可贺。

全都不会写!
最后更新于 2025-11-25