今天来完整介绍一下统一返回格式,在平时的学习中可能会发现后端的返回类型不同的话,前端需要调用不同的值来找到数据。今天就来解决这个问题。
我这里计划一下返回统一格式处理
这个类中有
code 编码 200成功 500失败 401未登录 403已登录没权限 conten内容(表示前端索要的真实数据) message 文字消息 成功消息 失败消息
这里我定义一个ResultJson类,下面先把完整代码给上再慢慢解释
import com.fzy.core.ResultCode;
import lombok.Getter;
@Getter
public class ResultJson<T> {
private Integer code; //200 500 401 403
private T content;
private String message;
private ResultJson(Integer code, T content, String message) {
this.code = code;
this.content = content;
this.message = message;
}
//有状态码,内容和消息
public static <T> ResultJson<T> getInstance(ResultCode resultCode, T content, String message) {
return new ResultJson<>(resultCode.getCode(), content, message);
}
//有内容和消息
public static <T> ResultJson<T> success(T content, String message) {
return getInstance(ResultCode.SUCCESS, content, message);
}
//只有内容
public static <T> ResultJson<T> success(T content) {
return success(content, null);
}
//有内容和消息
public static <T> ResultJson<T> failed(T content, String message) {
return getInstance(ResultCode.FAILED, content, message);
}
//只有消息
public static <T> ResultJson<T> failed(String message) {
return failed(null, message);
}
}
解释:这里只写@Getter 没有写@Setter是防止这里的参数被随便传。
还有就是可以看到我这里 private ResultJson(Integer code, T content, String message) {
this.code = code;
this.content = content;
this.message = message;
}
我这里取对象的方法私有化了,所以我们需要提供入口才能使用这些对象,也就是下面的方法都需要加上static才可以,定义的这些方法大家应该能看懂,其实就是成功了返回那些东西失败了返回哪些东西这样的,这里就不多解释了。
接下来为了防止后端随便写这个code状态码,这里要用枚举来写code状态码,先把我定义的枚举类ResultCode类代码放下面再解释:
@Getter
public enum ResultCode {
SUCCESS(200),
FAILED(500),
UNLOGIN(401),
FORBID(403);
private Integer code;
ResultCode(Integer code){
this.code = code;
}
}
解释:比如我们这里想用200状态码时就可以用ResultCode.SUCCESS就可以取到200这个状态码。当然我只是暂时定义了这些,如果有需要可以自己加。
具体使用的我们就可以将后端的返回类型统一成ResultJson。具体代码的话我这里就只举个分页的例子吧。
Controller层
@RestController
@RequestMapping("/umsAdmin")
public class UmsAdminController {
@Resource
UmsAdminService umsAdminService;
@GetMapping("/list")
public ResultJson<IPage<UmsAdmin>> getUmsAdminList(Integer pageNo, Integer pageSize, String name) throws InterruptedException {
return ResultJson.success(umsAdminService.getUmsAdminList(pageNo, pageSize, name));
}
}
注意这里: return ResultJson.success(umsAdminService.getUmsAdminList(pageNo, pageSize, name));
我返回的数据是不是就只有分页的结果,是不是就相当于是前端要的内容,就只有一个内容,是不是就相当于用了ResultJson中的这个方法
//只有内容
public static <T> ResultJson<T> success(T content) {
return success(content, null);
}
理清了这个原理代码就会很简单了。
Service层
public interface UmsAdminService extends IService<UmsAdmin> {
IPage<UmsAdmin> getUmsAdminList(Integer pageNo, Integer pageSize,String name);
}
@Service
public class UmsAdminServiceImpl extends ServiceImpl<UmsAdminMapper, UmsAdmin> implements UmsAdminService {
@Override
public IPage<UmsAdmin> getUmsAdminList(Integer pageNo, Integer pageSize,String name) {
QueryWrapper<UmsAdmin> wrapper = new QueryWrapper<>();
if(StringUtils.isNotBlank(name)){ //排除掉空串和空值
wrapper.like("name",name.trim()); //根据姓名进行模糊查询
}
wrapper.orderByDesc("sort");
return this.page(new Page<>(pageNo,pageSize),wrapper);
}
}
这里不用在意service的代码,就是个分页查询,重点是理清楚这个统一返回格式的作用及原理就行。
Ok,这篇就写到这里了,希望对你有帮助。