根据上一篇文章的前端升级,我们要对后端进行小修改。
对于前端使用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类,这样所有工作都已经完成了,此时最基础的框架已经完全搭建完毕,接下来将是功能扩展的内容,可喜可贺可喜可贺。

Comments NOTHING