SSM整合以及功能模块开发完成后,接下来有哪些问题需要我们去解决下。首先第一个问题是:
在Controller层增删改返回给前端的是boolean类型数据
在Controller层查询单个返回给前端的是对象
在Controller层查询所有返回给前端的是集合对象
目前我们就已经有三种数据类型返回给前端,如果随着业务的增长,我们需要返回的数据类型会越来越多。对于前端开发人员在解析数据的时候就比较凌乱了,所以对于前端来说,如果后台能够返回一个统一的数据结果,前端在解析的时候就可以按照一种方式进行解析。开发就会变得更加简单。
所以我们就想能不能将返回结果的数据进行统一,具体如何来做,大体的思路为:
根据分析,我们可以设置统一数据返回结果类
public class Result{
//描述统一格式中的数据
private Object data;
//描述统一格式中的编码,用于区分操作,可以简化配置0或1表示成功失败
private Integer code;
//描述统一格式中的消息,可选属性
private String msg;
}
**注意:**Result类名及类中的字段并不是固定的,可以根据需要自行增减提供若干个构造方法,方便操作。
前面分析了如何封装返回结果数据,具体在项目中该如何实现,通过个例子来操作一下
最终创建好的项目结构如下:
对于结果封装,我们应该是在表现层进行处理,所以我们把结果类放在controller包下,当然你也可以放在domain包,这个都是可以的,具体如何实现结果封装,具体的步骤为:
@Data
public class Result {
//描述统一格式中的数据
private Object data;
//描述统一格式中的编码,用于区分操作,可以简化配置0或1表示成功失败
private Integer code;
//描述统一格式中的消息,可选属性
private String msg;
public Result() {
}
public Result(Object data, Integer code, String msg) {
this.data = data;
this.code = code;
this.msg = msg;
}
public Result(Object data, Integer code) {
this.data = data;
this.code = code;
}
}
//状态码
public class ResultCode {
// 成功 状态
public static final Integer SAVE_SUCCES = 200; //保存成功
public static final Integer UPDATE_SUCCES = 200; //修改成功
public static final Integer DELETE_SUCCES = 200; //删除成功
public static final Integer SELECT_SUCCES = 200; //查询成功
// 失败
public static final Integer SAVE_FAIL = 2001;//保存失败
public static final Integer UPDATE_FAIL = 2002;//修改失败
public static final Integer DELETE_FAIL = 2003;//删除失败
public static final Integer SELECT_FAIL = 2004;//查询失败
// 其他 ......
}
**注意:**code类中的常量设计也不是固定的,可以根据需要自行增减,例如将查询再进行细分为SAVE_SUCCES,UPDATE_SUCCES,DELETE_SUCCES等。
//统一每一个控制器方法返回值
@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
private UserService userService;
@PostMapping
public Result save(@RequestBody User user) {
Boolean saveBoolean = userService.save(user);
if (saveBoolean)
return new Result("0000",ResultCode.SAVE_SUCCES,"保存成功");
return new Result("保存失败",ResultCode.SAVE_FAIL,"保存失败");
}
@PutMapping
public Result update(@RequestBody User user){
System.out.println(user);
Boolean updateBoolean = userService.update(user);
if (updateBoolean)
return new Result("0000",ResultCode.UPDATE_SUCCES,"修改成功");
return new Result("0000",ResultCode.UPDATE_FAIL,"修改成功");
}
@DeleteMapping("/{userId}")
public Result delete(@PathVariable Integer userId){
Boolean deleteBoolean = userService.delete(userId);
if (deleteBoolean)
return new Result("0000",ResultCode.DELETE_SUCCES,"删除成功");
return new Result("删除失败",ResultCode.DELETE_FAIL,"删除失败");
}
@GetMapping("/{userId}")
public Result findByUserId(@PathVariable Integer userId){
User user = userService.findByUserId(userId);
if (user != null){
return new Result(user,ResultCode.SELECT_SUCCES,"查询成功");
}
return new Result(null,ResultCode.SELECT_FAIL,"查询失败");
}
@GetMapping
public Result findAll(){
List<User> userList = userService.findAll();
if (userList != null){
return new Result(userList,ResultCode.SELECT_SUCCES,"查询成功");
}
return new Result(null,ResultCode.SELECT_FAIL,"查询失败");
}
}
至此,返回结果就已经能以一种统一的格式返回给前端。前端根据返回的结果,先从中获取code
,根据code判断,如果成功则取data
属性的值,如果失败,则取msg
中的值做提示。