SpringBoot统一返回格式

今天来完整介绍一下统一返回格式,在平时的学习中可能会发现后端的返回类型不同的话,前端需要调用不同的值来找到数据。今天就来解决这个问题。

我这里计划一下返回统一格式处理

这个类中有

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,这篇就写到这里了,希望对你有帮助。

  • 10
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值