第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定

關(guān)于后端統(tǒng)一數(shù)據(jù)格式的一點總結(jié)

標(biāo)簽:
SpringBoot

最近在学SpringBoot的时候,偶然又看到了统一数据格式这一块的内容,所有打算写点东西总结一下。

以前写项目的时候,代码满天飞,想返回什么就返回什么,想返回一个字符串就返回一个字符串,想返回一个对象就返回一个对象,完全不考虑别人受不受的了。然鹅在现在这种提倡前后端分离的时代,这么搞显然是不行的,不然会被同事打死滴。

举例子来看,比如注册用户的时候,验证用户的年龄是否符合条件,根据年龄给出不同的提示

// 字段验证@Min(value = 18, message = "未成年人禁止入内")private Integer age;//其他字段省略

插入一条记录

    /**
     * 添加一条记录
     * @param man 结果集合
     * @Validated 注解
     * @return
     */
    @GetMapping("/insertMan")    public Object insertOne(@Validated Man man, BindingResult br) {        // 如果不符合条件,则不插入
        if(br.hasErrors()) {            return "插入失败";
        }
        man.setName(man.getName());
        man.setAge(man.getAge());        return manDao.save(man);
    }

可以看到,如果年龄不满18岁,就返回一个字符串,否则返回插入的对象。如果你一个人包揽前后端,那随便你写,反正是你自己的事,但如果你分工合作的话,这样写显然就不太合适了,一个方法这样,那几十个上百个呢,我前端还怎么接收数据啊。

所以我们得统一下返回的格式啊,暂且先定义一个类ResultData吧

/**
 * 封装结果集成统一的json样式
 * @author liu
 */public class ResultData<T> {
    // 信息状态码,0表示成功,1表示失败
    private Integer code;    // 提示信息
    private String msg;    // 返回的对象
    private T data;    //省略set/get方法。。。。。}

有了这么一个类,那我不可能每次要都new一个ResultData然后调用set方法设置属性后返回吧,这样肯定会有大量的重复代码。所以我们还得定义一个类去专门封装这些属性并进行返回。暂且定义为ResultUtils吧。

/**
 * 编写相应的方法,减少重复代码
 * @author liu
 */public class ResultUtils {    // 统一结果集对象
    private static ResultData<Object> result = new ResultData<>();    
    /**
     * 成功时调用的函数
     * @param object 要返回的对象
     * @return
     */
    public static ResultData<Object> success(Object object) {
        result.setCode(0);
        result.setMsg("插入成功");
        result.setData(object);        return result;
    }    
    /**
     * 成功时,如果没有要返回的对象,调用此方法
     * @return
     */
    public static ResultData<Object> success() {        return success(null);
    }    
    /**
     * 失败时调用的函数
     * @param code 要返回的状态码
     * @param msg 要返回的信息
     * @return
     */
    public static ResultData<Object> fail(Integer code, String msg) {
        result.setCode(code);
        result.setMsg(msg);        return result;
    }
}

有了这两个类,我们基本的也就实现了,修改上面插入数据的代码如下

    /**
     * 添加一条记录
     * @param man 结果集合
     * @Validated 注解
     * @return
     */
    @GetMapping("/insertMan")    public Object insertOne(@Validated Man man, BindingResult br) {        // 如果不符合条件,则不插入
        if(br.hasErrors()) {            return ResultUtils.fail(1, "插入失败");
        }
        man.setName(man.getName());
        man.setAge(man.getAge());        return ResultUtils.success(manDao.save(man));
    }

发送请求看看返回的结果

首先插入一个年龄10岁的对象


webp

15.png

再插入一个年龄20岁的对象


webp

16.png


可以看到,不论插入成功或者插入失败,都返回一个统一的数据格式。

现在我们来通过id查询一条记录

    public void queryById(Integer id) throws Exception {
        Man man = manDao.findOne(id);        if(man.getAge() < 10) {            throw new Exception("年龄太小了,好好学习");
        } else if(man.getAge() > 10 && man.getAge() < 16) {            throw new Exception("你也太小了,多吃点饭");
        } else {            throw new Exception("未知错误");
        }
    }

在controller里进行调用

    /**
     * 根据id查询记录,带有异常
     * @param id
     * @throws Exception
     */
    @RequestMapping("/queryById/{id}")    public void queryById(@PathVariable("id") Integer id) throws Exception {
        manService.queryById(id);
    }

现在我们来进行查询看看返回什么


webp

17.png

可以看到返回了一个非常不友好的东西,这肯定不是我们想要的。

现在我们试着来定义一个自己的异常MyException

/**
 * 自定义异常,统一异常处理
 * @author liu
 */@SuppressWarnings("serial")public class MyException extends RuntimeException {    // 状态码
    private Integer code;    
    public MyException(String message, Integer code) {        super(message);        this.code = code;
    }    public Integer getCode() {        return code;
    }    public void setCode(Integer code) {        this.code = code;
    }
}



作者:Java攻城玩家
链接:https://www.jianshu.com/p/5e67b1d2f895


點擊查看更多內(nèi)容
TA 點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優(yōu)質(zhì)文章

正在加載中
  • 推薦
  • 評論
  • 收藏
  • 共同學(xué)習(xí),寫下你的評論
感謝您的支持,我會繼續(xù)努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學(xué)

大額優(yōu)惠券免費領(lǐng)

立即參與 放棄機會
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號

舉報

0/150
提交
取消