Spring Boot入门第三篇持续集成和统一异常处理

35次阅读
没有评论

开篇第一句话,SpringBoot入门系列只适合萌新,大佬请直接看源码解析哪一块。

上接SpringBoot集成模板引擎实现web访问

1、修改pom.xml增加依赖。

<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger2</artifactId>
</dependency>
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger-ui</artifactId>
    <version>2.2.2</version>
</dependency>

2、创建swagger2配置类

@Configuration
@EnableSwagger2
public class SwaggerConfig {
    @Bean
    public Docket createReastApi(){
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .select()
                .apis(RequestHandlerSelectors.basePackage("xyz.sunne.view"))
                .paths(PathSelectors.any())
                .build();
    }

    private ApiInfo apiInfo(){
        return new ApiInfoBuilder()
                .title("SpringBoot入门示例")
                .description("包含常见的入门示例和实战代码")
                .termsOfServiceUrl("http://localhost:8099")
                .contact("Sunne")
                .version("1.0.0")
                .build();
    }
}

3、在Controller添加swagger

@Controller
@RequestMapping("swagger")
@Api("swagger测试类")
public class SwaggerController {
    @RequestMapping(value = "user",method = RequestMethod.POST) //访问地址为"/user",并且指定为post请求
    @ApiModelProperty(value = "获取用户昵称",notes = "根据用户id获取昵称")
    @ResponseBody //返回json请求
    public User UserSwagger(@RequestBody User user){
        User u = new User();
        if (user.getName() != null && !("").equals(user.getName())){
            user.setNickname(u.getNickname());
            return u;
        }
        return u;//后续这里做一个异常处理,方便业务的稳定性。

    }
}

4、访问http://localhost:8099/swagger-ui.html

Spring

Spring


统一异常处理。

    为了方便我在这里定义一个枚举作为异常消息处理,大家只能以此为参考。

    1、统一请求的枚举类,我们平时开发一般为了响应前端的结果,通常会给出状态码和异常信息,前端拿到状态码即可判断业务是否正常,然后才开始处理结果,这样能够有效的加强业务稳定性,例子如下。

@AllArgsConstructor
@NoArgsConstructor
public enum Ecode {
    SUCCESS(1,"登录成功"),
    ERROR(2,"请求异常");
    public Integer code;
    public String msg;
    public static LinkedHashMap<Integer,String> geterrormsg(int state , String msg){
        LinkedHashMap< Integer,String> responseMessage = new LinkedHashMap<>();
        for (Ecode ecode : Ecode.values()){
            responseMessage.put(ecode.code,ecode.msg);
        }
        return responseMessage;
    }
}

2、自定义异常,因为我们自定义了异常的状态码和状态信息,接下来统一异常即可,具体代码如下。

@EqualsAndHashCode(callSuper = true)
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class ReqException extends RuntimeException implements Serializable {
    private int code;
    private Serializable msg;
    private Exception e;

    public ReqException(Ecode ecode, Exception e) {
        this.code = ecode.code;
        this.msg = ecode.msg;
        this.e = e;
    }

    public ReqException(Ecode responseCode) {
        this.code = responseCode.code;
        this.msg = responseCode.msg;
    }

    public static ReqException fail(String msg){
        return ReqException.builder()
                .code(Ecode.ERROR.code)
                .msg(msg)
                .build();
    }
}

3、编写前端测试

@RequestMapping(value = "errortest",method = RequestMethod.POST)
@ApiModelProperty(value = "测试异常抛出")
@ResponseBody  //返回json请求
public User ErrorTest(@RequestBody User user){
    User u = new User();
    if (user.getName() != null && !("").equals(user.getName())){  //如果前端给过来用户姓名是空的,抛出异常
        user.setNickname(u.getNickname());
        return u;
    }
    throw ReqException.fail("用户姓名不能为空"); //可以封装成为实体返回给前端,让前端看到异常状态码,业务执行失败,或者告诉前端参数不对

}

4、测试结果

Spring

Springeq:源码依赖于lombok插件,下载源码,务必安装lombok插件,安装教程请自行百度

源码下载地址Spring Boot入门第三篇持续集成和统一异常处理

1
Sunne
版权声明:本站原创文章,由Sunne于2020年06月23日发表,共计8491字。
转载提示:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)