基于spring boot的快速api开发框架spring-boot-base

基于Spring boot的快速API开放框架 github

前言:

该框架基于spring data jpa 作为数据库中间件
  1. 安装

    <dependency>
        <groupId>com.cyssxt</groupId>
        <artifactId>spring-boot-base</artifactId>
        <version>${version}</version>
    </dependency>
    
  2. 讲发布包引入到Application启动注解的扫描包参数中. eg.

    @SpringBootApplication(scanBasePackages = {"com.cyssxt"})
    
  3. 接口消息通用返回

    {
           "data":自定返回结构
           "errors": null,//接口错误列表
           "extra": null,//额外附加信息
           "retCode": 0,//错误吗
           "retMsg": "SUCCESS",//返回消息
           "serviceType": null //服务类型
       }
    

    3.1 data构造示例:

        UserInfo userInfo = new UserInfo();
        ResponseData.success(userInfo)
    

    3.2 errors:

    @Data
    public class LoginReq extends BaseReq {
       String phone;
       @NotEmpty
       @NotNull
       String secret; //当前此字段为空或者为null时会在errors中添加信息
    }
    

    3.3 extra示例:

     responseData.setExtra(3); //设置额外信息 ,非必需 无必要
    

    3.4 retCode和retMsg示例

    TIP: 步骤1:枚举类继承ErrorMessage接口

    import com.cyssxt.common.response.ErrorMessage;
    import com.cyssxt.common.response.ErrorMessage;
        
    public enum  TestErrorMessage implements ErrorMessage {
        CODE_NOT_EXIST(2000001, "验证码不存在");
            private Integer retCode;
        private String msg;
        private int status=200;
    
        TestErrorMessage(Integer retCode, String msg){
            this.retCode = retCode;
            this.msg = msg;
        }
        @Override
        public Integer getCode() {
            return retCode;//返回的状态值
        }
    
        @Override
        public String getMsg() {
            return msg; //返回的retMsg
        }
    
        @Override
        public int getStatusCode() {
            return 200; //状态吗
        }
    }
    

    3.5 返回状态吗或者抛出异常

    public ResponseData findTest(){
        throw new ValidException(TestErrorMessage.CODE_NOT_EXIST);
    }
    

    OR

    public ResponseData findTest(){
        return ResponseData fail(TestErrorMessage.CODE_NOT_EXIST);
    }
    
  4. CURD
    该框架提供快速开发api的方法(提供增、删、改、查)

    4.1 继承com.cyssxt.common.api.controller类即可实现通用增删改查方法

    public abstract class BaseController<T extends BaseEntity, V extends CreateReq, Q extends CreateTimeDto, W extends PageReq> {
     @RequestMapping(value="/list",method = RequestMethod.POST)
       public ResponseData list(@Valid @RequestBody W req, BindingResult result) throws ValidException;//全量列表返回
    
       @RequestMapping(value="/info",method = RequestMethod.POST) 
       public ResponseData list(@Valid @RequestBody InfoReq req) throws ValidException; //查询单个详情
       @RequestMapping(value="/page",method = RequestMethod.POST)
       public ResponseData page(@Valid @RequestBody W req, BindingResult result) throws ValidException;//分页查询
    
       @RequestMapping(value="/update",method = RequestMethod.POST)
       public ResponseData update(@Valid @RequestBody V req, BindingResult result) throws ValidException;//单个更新
    
       @RequestMapping(value="/del",method = RequestMethod.POST)
       public ResponseData del(@Valid @RequestBody DelReq req, BindingResult result) throws ValidException; //单个删除
    }
    

    4.2 范型描述

    T: 实体类 jpa实体类继承此类
    V:  创建范型,主要用于创建一个实体的时候用到的消息体结构
    Q:接口返回的视图类
    W: 分页请求参数类
    

    4.3 自定义查询

    @Reource
    QueryFactory queryFactory;
    ListResult<ProvinceDto> provinceDtoList =  queryFactory.selectListByKeys(ProvinceEntity.class,new QueryParam[]{
                    new QueryParam("del_flag",false)
            }, ProvinceDto.class);//查询自定信息,ProvinceEntity.class为实体类
    PageResult<ADto> listResult = queryFactory.selectPageAndKeys("select * from student A ",getQueryParameter(req),req,ADto.class,getKeys());//通过sql查询数据 ADto.class为接口返回视图类
    
  5. 全局token校验
    自定义实现CommonUserService类
    示例:

        @Override
        public UserInfo findById(String userId) throws ValidException {
            UserEntity userEntity = JpaUtil.get(userId,userRepository,TestErrorMessage.USER_NOT_EXIST);
            if(userEntity!=null && CommonUtil.isTrue(userEntity.getDelFlag())){
                throw new ValidException(CoreErrorMessage.USER_ID_NOT_NULL);
            }
            return userEntity;
        }
    
        @Override
        public String getUserId(String token) {
            String userId = redisUtil.getStringValue(getSessionKey(token));
            return userId;
        }
    
  6. 参数校验

    public class UserController {
        @Resource
        UserService userService;
    
        @RequestMapping(value="login")
        public ResponseData login(@Valid @RequestBody LoginReq req) throws ValidException;// @Valid注解支持hibernate validator
    
    
  7. 授权校验

    
        @RequestMapping(value = "update")
        @Authorization//加了此注解表示接口需要授权
        // @Alias("userId") String userId,@Alias("user")  userId表示带入userid信息 user表示带入用户信息****
        public ResponseData update(@Valid @RequestBody UserUpdateReq req, BindingResult result, @Alias("userId") String userId,@Alias("user") UserEntity user) throws ValidException ;
    
  8. Thanks For

  1. Spring boot
  2. Lombok
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,684评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,143评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,214评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,788评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,796评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,665评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,027评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,679评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,346评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,664评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,766评论 1 331
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,412评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,015评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,974评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,073评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,501评论 2 343

推荐阅读更多精彩内容