携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第3天,点击查看活动详情
封装响应
刚刚我们的登入逻辑是没有了问题,但是我们的服务器并没有给客户端返回响应,所以我们需要根据约定的响应,登入请求后分装并返回!
创建一个tools包统一保存一些通用的代码,创建响应类ResponseBodyMessage这里响应信息我们可以通过泛型,就可以变成通用的响应!
package com.example.onlinemusic.tools;
import lombok.Data;
/**
* Created with IntelliJ IDEA.
* Description:统一(泛型)的响应体
* User: hold on
* Date: 2022-07-26
* Time: 21:32
*/
@Data
public class ResponseBodyMessage <T>{
private int status;//状态码 0 表示成功,-1表示失败!
private String message;//响应信息描述
private T data; //返回的数据,这里采用泛型因为响应的数据的种类很多
public ResponseBodyMessage(int status, String message, T data) {
this.status = status;
this.message = message;
this.data = data;
}
}
验证
Session创建
我们再对刚刚的登入功能创建Session
我们通过HttpServlet下的getSession方法获取到Session,然后再通过SetAttribute方法设置会话,保存在服务器中!
//优化后的UserController类!
package com.example.onlinemusic.controller;
import com.example.onlinemusic.mapper.UserMapper;
import com.example.onlinemusic.model.Contant;
import com.example.onlinemusic.model.User;
import com.example.onlinemusic.tools.ResponseBodyMessage;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
/**
* Created with IntelliJ IDEA.
* Description:
* User: hold on
* Date: 2022-07-26
* Time: 15:12
*/
@RestController // @ResponseBody + @Controller
@RequestMapping("/user") //设置路由 用来映射请求!
public class UserController {
//将UserMapper注入!
@Resource
private UserMapper userMapper;
@RequestMapping("/login")
//@RequestParam SpringMVC下的注解,表示该参数必须传入给服务器!
//value = "前端参数名",required = true/false,defaultValue ="默认值"
//这里required设置为ture表示该参数必传,默认为true,如果设置了defaultValue那默认required为false
public ResponseBodyMessage<User> login(@RequestParam String username, @RequestParam String password, HttpServletRequest request){
User userLogin = new User();
userLogin.setUsername(username);
userLogin.setPassword(password);
//调用mapper下的 login查询user!
User user = userMapper.login(userLogin);
//返回响应
if(user!=null){//登入成功!
//登入成功就在服务器保存该Session会话!
//这里我们的key值可以通过常量值设置,避免后面出错!
//request.getSession().setAttribute("USERINFO_SESSION_KEY",user);
// request.getSession().setAttribute(Contant.USERINFO_SESSION_KEY,user);
return new ResponseBodyMessage<User> (0,"登入成功",userLogin);
}else{
return new ResponseBodyMessage<User> (-1,"登入失败",userLogin);
}
}
}
我们通过Fiddler抓包获取响应,
设置了Session会话响应
未设置Session会话响应!
我们可以看到设置了的返回的响应头中有Session信息,否则没有!