五分钟搭建一个企业级web项目

前言

使用官方springboot-starter和第三方脚手架工具hunter-spring-boot-starter,

快速构建项目,在五分钟内即可进行业务开发。

一、使用官方starter快速搭建一个项目

  1. 使用IDEA spring initializr 新建一个spring项目
    image.png

  2. 填写一些基本信息
    group: 组织,一般是域名倒写
    artifact:项目
    image.png

  3. 添加web支持
    image.png

  4. 配置文件改名
    在resource目录下默认生成的配置文件是application.properties,把他改成 application.yml

  5. 运行
    在项目下有一个唯一的java类,运行这个main方法即可。

  6. 访问

浏览器访问http://localhost:8080/出现404项目运行成功

二、使用第三方starter完善

springboot已经大量简化了xml配置,但如果想进入业务的开发,还有些许配置要做,还要引入一些必备的工具类等,因此在springboot的基础上,hunter-spring-boot-starter又做了一些提供了一些常用工具和自动装配,使你马上进入业务开发阶段。
具体查看详细文档

  • 项目功能:
  1. 通用返回类Result
  2. 全局异常处理
  3. Jackson工具类
  4. StringUtil工具
  5. Redis工具类
  6. RestTemplate工具类
  7. 线程池自动装配
  8. swagger 自动装配
  9. DefaultWebMVC注解
  • 包含的依赖
  1. Apache common-lang3
  2. common-lang
  3. lombok
  4. OKhttp

在pom引入jar包

<dependency>
       <groupId>com.github.gxhunter</groupId>
       <artifactId>hunter-spring-boot-starter</artifactId>
       <version>0.5</version>
</dependency>

使用内置的通用返回类Result

在企业后端开发中,Controller一般有一个通用类result,
hunter-spring-boot-starter提供了一个通用返回类实践,所有的Controller都使用这个类作为返回值。
示例Controller

@RestController
public class IndexController{
    @GetMapping("index")
    public Result index(){
        return Result.success("请求首页成功");
    }
}

使用postman调用接口
image.png

Result字段描述

字段类型描述
statusint状态码
messagestring返回信息
dataT携带数据
successboolean是否成功

静态方法

除了上述的Result.success(Obj)用于返回成功,并携带Obj数据,Result还提供了其他的静态方法

方法名称描述
success(T data)成功并返回数据
success()成功不携带数据
successMsg(String msg)成功并返回信息
failed(String str)失败,并提示信息,code使用默认
failed(T data,IErrorCode code)失败,携带数据和提示信息和code
failed(T data,String message)失败,并携带数据和提示信息
failed()失败,不携带信息

返回码对照表

遵循COC原则,内置了几个返回码枚举,你也可以实现IResponseCode.java自定义扩展
内置的返回码枚举在com.github.gxhunter.enums.ResultEnum

返回码描述
0成功
1查询不到任何内容
2新建失败
3修改失败
4删除失败
1000操作失败(一般是抛出服务端手段throw ApiException)
1001参数校验失败
1999网络超时(上述之外的其他异常)

使用内置的异常处理器

无需任何配置,默认开启了异常处理器,分类捕获了ApiException、MethodArgumentNotValidException、Exception三种异常(可自行扩展)
查看如下实例代码

    @PostMapping("/error")
    public void error(){
        int a = 1/0;
    }

    @PostMapping("/apierror")
    public void apiError(){
// 模拟数据库操作失败
        throw new ApiException("数据关联失败");
    }
  • 请求 /error 接口,抛出的异常没做分类处理,返回status为1999,提示信息是网超时
  • 请求 /apierror 抛出的异常是ApiException,在异常处理器有做分类,返回结果如下
    image.png
  • 参数校验失败异常
    如下一个实体类person,注解限制了name字段不能为null
@Data
public class Person{
    @NotNull
    private String name;
    private long age;
}

对应Controller如下:

    @PutMapping("/verify")
    public Result<Person> verifyPerson(@RequestBody@Valid Person person){
        return Result.success(person);
    }

@Valid表示开启校验,这个注解必须要加

前端传入的name字段为空时,返回:

image.png


swagger支持

前面使用的postman,能够调用实现restfulapi的调用,但是这样每次都要自己填写url和参数实属麻烦,为此,本starter也实现了swagger2的自动装配。

  1. 引入swagger2包
<dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>2.9.2</version>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>2.9.2</version>
        </dependency>
  1. 在application.yml配置基本信息
    有两个必配项,其他为选配项。
    必配项: 1.enabled是否开启swagger 2.base-package 扫描的包(一般配Controller所在包路径即可)
    image.png

  2. 访问swagger
    重启项目,访问http://localhost:8080/swagger-ui.html
    显示如下界面,swagger就配置成功啦。
    image.png

@DefaultWebMVC注解

默认情况下,java序列化过程有许多坑,这个注解就是为解决这些坑而生。

场景

有如下一个类

@Data
public class Person{
    private long id;
    @NotNull
    private String name;
    private long age;
    private Date birthday;
    private LocalDateTime registerTime;
}

在Controller中,新增一个接口

    @GetMapping("/getPerson")
    public Result getPerson(){
        Person person = new Person();
        person.setId(12345678912233L);
        person.setBirthday(new Date());
        person.setRegisterTime(LocalDateTime.now());
        return Result.success(person);
    }

结果前端请求到的数据如下
image.png
有几个问题

  1. 接收到id与后端传过来的不一样,这是long类型精度丢失
  2. 时间格式不友好
解决方案

在启动类加上@DefaultWebMVC,无需其他操作,
此时再请求上述接口,返回的数据为:
image.png

@DefaultWebMVC注解功能总结:
  1. json时间格式化 为yyyy-MM-dd HH:mm:ss
  2. 时区指定为GMT+8
  3. long类型自动序列化为字符串,解决精度丢失问题。
  4. 其他在GitHub上查看详细文档

三、其他

到此项目初始化已经完成,可马上进入业务开发了,还有内置其他工具,如
JsonUtil、线程池、redisUtil、RestUtil、ftpUtil、StringUtil
这里就不再赘述,有兴趣可以查看详细文档





转载于:https://www.cnblogs.com/gxhunter/p/10286212.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值