(1)统一返回是什么,为什么要设置统一返回
设置统一返回是为了后端在与前端数据交互的时候,传递的参数形式统一。比如:是否成功,返回码,返回信息,返回数据。
(2)统一返回一般放在哪比较好?
设置统一返回最好放到一个公共类中,以后只需调用这个公共类即可。
(3)统一返回是怎么实现的?
首先我们想为了实现统一返回,需要判断:
是否成功(true,false),
返回码(400,401,402,403,404.。。。。。若干),
返回信息(message),
返回数据(data)。
我们来想,这四项中,返回码的值得种类是最多的,而且不方便管理,所以我们Wie返回码写一个接口,以后就通过调用这个接口的点方法即可。
在common模块下,创建一个ResultCode接口
public interface ResultCode {
public static Integer SUCCESS = 20000;//执行成功的返回码
public static Integer ERROR = 20001;//执行失败的返回码
}
然后我们写一个统一结果返回类R
//统一返回结果的类
@Data
public class R {
@ApiModelProperty(value = "是否成功")
private Boolean success;
@ApiModelProperty(value = "返回码")
private Integer code;
@ApiModelProperty(value = "返回消息")
private String message;
@ApiModelProperty(value = "返回数据")
private Map<String, Object> data = new HashMap<String, Object>();
//把构造方法私有
private R() {}
//成功静态方法
public static R ok() {
R r = new R();
r.setSuccess(true);
r.setCode(ResultCode.SUCCESS);
r.setMessage("成功");
return r;
}
//失败静态方法
public static R error() {
R r = new R();
r.setSuccess(false);
r.setCode(ResultCode.ERROR);
r.setMessage("失败");
return r;
}
public R success(Boolean success){
this.setSuccess(success);
return this;
}
public R message(String message){
this.setMessage(message);
return this;
}
public R code(Integer code){
this.setCode(code);
return this;
}
public R data(String key, Object value){
this.data.put(key, value);
return this;
}
public R data(Map<String, Object> map){
this.setData(map);
return this;
}
}
然后,我们在写controller类的时候,其方法的返回值就写R即可,下面以数据的增删改查,分页查询,分页查询带分页等进行演示。
特别说明,下面的删除操作的请求方式是 @DeleteMapping("/remove/{id}"),此方法在浏览器中是无法进行测试的,我们需要通过swagger进行测试,swagger是一个api文档,可以在网页进行测试每个接口(此接口指的是与前端的接口,即controller类里面的方法,而不是interface),swagger如何实现下篇文章进行说明。
@RestController
@RequestMapping("/edu/teacher")
public class TeacherController {
@Autowired
private TeacherService teacherService;
@ApiParam(value = "所有老师信息")
@GetMapping("all")
public R getAll(){
List<Teacher> list = teacherService.list(null);
return R.ok().data("items",list);
}
@ApiParam(value = "根据id逻辑删除老师")
//用swagger进行测试
@DeleteMapping("/remove/{id}")
public R deleted(@PathVariable Long id){
boolean flag = teacherService.removeById(id);
if (flag){
return R.ok().message("删除成功!");
}else {
return R.error().message("删除失败!");
}
}
@GetMapping("/page/{current}/{size}")
public R pageTeacher(@PathVariable Integer current,
@PathVariable Integer size ){
Page<Teacher> page = new Page<>(current,size);
try {
int i=10/0;
}catch (Exception e){
throw new YuanExcaption(20001,"执行了自定义异常!");
}
teacherService.page(page,null);
long total = page.getTotal();//总记录数
List<Teacher> records = page.getRecords();//每页数据的集合
HashMap map = new HashMap();
map.put("total",total);
map.put("records",records);
return R.ok().data(map);
}
//分页查询带分页
@PostMapping("/ContiditionPage/{current}/{size}")
public R PageTeacherCondition(@PathVariable int current,
@PathVariable int size ,
@RequestBody(required = false) TeacherQuery teacherQuery){
Page<Teacher> page = new Page<>(current, size);
QueryWrapper<Teacher> wrapper = new QueryWrapper<>();
String career = teacherQuery.getCareer();
Integer level = teacherQuery.getLevel();
Date greatTime = teacherQuery.getGreatTime();
Date updateTime = teacherQuery.getUpdateTime();
if (!StringUtils.isEmpty(career)){
wrapper.like("career",career);
}
if (!StringUtils.isEmpty(level)){
wrapper.eq("level",level);
}
if (!StringUtils.isEmpty(greatTime)){
wrapper.ge("great_time",greatTime);
}
if (!StringUtils.isEmpty(updateTime)){
wrapper.le("update_time",updateTime);
}
IPage<Teacher> teacherIPage = teacherService.page(page, wrapper);
long total = page.getTotal();//总记录数
List<Teacher> records = page.getRecords();//每页数据的集合
HashMap map = new HashMap();
map.put("total",total);
map.put("records",records);
return R.ok().data(map);
}
//添加讲师
@PostMapping("add")
public R addTeacher(@RequestBody Teacher teacher){
boolean save = teacherService.save(teacher);
if (save){
return R.ok();
}else {
return R.error();
}
}
//根据id查询
@GetMapping("select/{id}")
public R getTeacherById(@PathVariable Integer id){
Teacher teacher = teacherService.getById(id);
return R.ok().data("teacher",teacher);
}
//修改讲师
@PostMapping("updateTeacher")
public R updateTeacherById(@RequestBody Teacher teacher){
boolean b = teacherService.updateById(teacher);
if (b){
return R.ok();
}else {
return R.error();
}
}
}
您的点赞是对我最大的支持!