java同意結果返回(鏈式程式設計結果)
阿新 • • 發佈:2021-07-11
一、統一返回資料格式
專案中我們會將響應封裝成json返回,一般我們會將所有介面的資料格式統一, 使前端(iOS Android, Web)對資料的操作更一致、輕鬆。 一般情況下,統一返回資料格式沒有固定的格式,只要能描述清楚返回的資料狀態以及要返回的具體資料就可以。但是一般會包含狀態碼、返回訊息、資料這幾部分內容 例如,我們的系統要求返回的基本資料格式如下: 列表:{ "success": true, "code": 20000, "message": "成功", "data": { "items": [ { "id": "1","name": "路飛", "intro": "海賊王路飛" } ] } }
分頁:
{ "success": true, "code": 20000, "message": "成功", "data": { "total": 17, "rows": [ { "id": "1", "name": "鳴人", "intro": "火影七代" } ] } }
沒有返回資料:
{ "success": true, "code": 20000,"message": "成功", "data": {} }
失敗:
{ "success": false, "code": 20001, "message": "失敗", "data": {} }
統一結果:
{ "success": 布林, //響應是否成功 "code": 數字, //響應碼 "message": 字串, //返回訊息 "data": HashMap //返回資料,放在鍵值對中 }
二、建立統一結果返回類
1.建立常量狀態code
package com.stu.commonutils; public interface ResultCode {public static Integer SUCCESS = 20000; public static Integer ERROR = 20001; }
2.建立統一的返回結果類(基於lombok沒有get和set方法)
package com.stu.commonutils; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.util.HashMap; import java.util.Map; @Data public class ResultData { @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 ResultData(){} public static ResultData success(){ ResultData r = new ResultData(); r.setSuccess(true); r.setCode(ResultCode.SUCCESS); r.setMessage("成功"); return r; } public static ResultData error(){ ResultData r = new ResultData(); r.setSuccess(false); r.setCode(ResultCode.ERROR); r.setMessage("失敗"); return r; } public ResultData success(Boolean success){ this.setSuccess(success); return this; } public ResultData message(String message){ this.setMessage(message); return this; } public ResultData code(Integer code){ this.setCode(code); return this; } public ResultData data(String key, Object value){ this.data.put(key, value); return this; } public ResultData data(Map<String, Object> map){ this.setData(map); return this; } }
3.例子
package com.stu.eduservice.controller; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.stu.commonutils.ResultData; import com.stu.eduservice.entity.EduCourse; import com.stu.eduservice.entity.EduVideo; import com.stu.eduservice.entity.vo.CoursePublishVo; import com.stu.eduservice.entity.vo.CourseQuery; import com.stu.eduservice.entity.vo.CourseVo; import com.stu.eduservice.service.IEduCourseService; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import java.util.HashMap; import java.util.List; import java.util.Map; /** * <p> * 課程 前端控制器 * </p> * * @author stu * @since 2021-05-29 */ @RestController @RequestMapping("/eduservice/course") @CrossOrigin public class EduCourseController { @Autowired private IEduCourseService eduCourseService; //條件查詢,分頁 @PostMapping("pageCourseCondition/{current}/{limit}") public ResultData pageTeacherCondition(@PathVariable long current, @PathVariable long limit, @RequestBody(required = false) CourseQuery courseQuery ){ QueryWrapper wrapper = new QueryWrapper(); String title = courseQuery.getTitle(); String status = courseQuery.getStatus(); if (!StringUtils.isEmpty(title)) { wrapper.like("title", title); } if (!StringUtils.isEmpty(status) ) { wrapper.eq("status", status); } Page<EduCourse> page = new Page<EduCourse>(current,limit); eduCourseService.page(page,wrapper); Map<String,Object> map = new HashMap<String,Object>(); long total = page.getTotal(); List<EduCourse> list = page.getRecords(); map.put("total",total); map.put("list",list); return ResultData.success().data(map);//鏈式程式設計 } }