在项目开发中,后端查询的数据需要回显给前端展示,此时继续使用addAttribute(ModelAndView中的Model)封装回显数据就显的有点捉襟见肘了。此篇文章使用泛型进行简单的数据封装回显给前端展示。…
Springboot用来做控制层,mybatis用来做持久层,swagger API可视化工具
通用返回结果视图
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonInclude.Include;
import lombok.Data;
/**
* 通用返回结果视图
* T:绑定数据-泛型保存
* E:提示参数-enum枚举
* This:代表类本身,extends继承自身-存储数据-作为返回值
*
* 下列三个返回值属性,前端可直接请求后获取查看
* success:返回成功-true
* error:返回失败-false
* data:返回数据
*/
@Data //使用lombok,可省略set/get
@SuppressWarnings("unchecked")
public class DataResult<T, E, This extends DataResult<T, E, This>> {
private boolean success;
@JsonInclude(Include.NON_ABSENT)
private T data;
@JsonInclude(Include.NON_ABSENT)
private E error;
public This success() {
this.success = true;
return (This) this;
}
public This failure() {
this.success = false;
return (This) this;
}
public This success(T data) {
this.success = true;
this.data = data;
return (This) this;
}
public This failure(E error) {
this.success = false;
this.error = error;
return (This) this;
}
}
控制层调用-以登录功能为例
//继承DataResult
private static class LoginResult extends DataResult<Void,ReportError, LoginResult> {
}
//枚举类-可进程异常声明处理
private enum ReportError {
NotFound, PermissionDenied, NullData
}
@PostMapping("/login")
public LoginResult login(@RequestParam String username,
@RequestParam String password,
HttpSession session,
RedirectAttributes attributes) {
final var result = new LoginResult();
User user = new User(); //用户信息类
if (username.equals("admin") && password.equals("12345")) {
user.setUsername(username);
return result.success(user);
} else {
user.setUsername(username);
user.setPassword(password);
return result.failure(user);
}
}
前端可通过页面请求或使用swagger直接请求后获取数据查看