boot返回码规范 spring_sprigboot-new-coding-standards

sprigboot-new-coding-standards

介绍

SpringBoot脚手架,遵守严格的代码规范。

规范详细说明

1.遵循标准RESTful API

2.异常采用枚举进行封装(业务内部异常往上抛,返回客户端需要将对应的异常转换为具体的状态的,这里介绍Spring提供的全局异常处理)

package org.niugang.coding.advice;

import lombok.extern.slf4j.Slf4j;

import org.niugang.coding.enums.ExceptionEnum;

import org.niugang.coding.exception.ServiceException;

import org.niugang.coding.vo.ExceptionResult;

import org.springframework.http.HttpStatus;

import org.springframework.http.ResponseEntity;

import org.springframework.validation.BindException;

import org.springframework.web.bind.MethodArgumentNotValidException;

import org.springframework.web.bind.annotation.ControllerAdvice;

import org.springframework.web.bind.annotation.ExceptionHandler;

import javax.validation.ConstraintViolationException;

import java.util.HashMap;

import java.util.Map;

/**

* 全部异常处理

*

* @author Created by niugang on 2018/12/26/12:19

*/

@ControllerAdvice

@Slf4j

public class BasicExceptionHandler {

/**

* 具体业务层异常

*

* @param e 业务异常

* @return ResponseEntity

*/

@ExceptionHandler(ServiceException.class)

public ResponseEntity handleException(ServiceException e) {

/**

* 响应的状态码,为枚举中定义的状态码

*/

return ResponseEntity.status(e.getExceptionEnum().value())

.body(new ExceptionResult(e.getExceptionEnum()));

}

/**

* 业务处理未知异常

*

* @param e 异常

* @return ResponseEntity

*/

@ExceptionHandler(Exception.class)

public ResponseEntity> exceptionResultResponseEntity(Exception e) {

//所有参数异常

//在对象上绑定校验如(UserDTO)

if (e instanceof BindException || e instanceof MethodArgumentNotValidException || e instanceof IllegalArgumentException) {

log.error("参数校验失败:{}", e);

return ResponseEntity.status(ExceptionEnum.PARAMS_VALIDATE_FAIL.value())

.body(new ExceptionResult(ExceptionEnum.PARAMS_VALIDATE_FAIL));

}

//方法上参数校验失败

if (e instanceof ConstraintViolationException) {

ConstraintViolationException ex = (ConstraintViolationException) e;

Map res = new HashMap<>(16);

res.put("status", HttpStatus.BAD_REQUEST.value());

res.put("message", ex.getMessage());

res.put("timestamp", System.currentTimeMillis());

return ResponseEntity.status(HttpStatus.BAD_REQUEST.value()).body(res);

}

log.error("服务器内部异常:{}", e);

/*

* 响应的状态码,为枚举中定义的状态码

*/

return ResponseEntity.status(ExceptionEnum.BUSINESS_DEAL_FAIL.value())

.body(new ExceptionResult(ExceptionEnum.BUSINESS_DEAL_FAIL));

}

}

value 对应响应状态码

message 错误描述

@NoArgsConstructor

@AllArgsConstructor

public enum ExceptionEnum {

/**

*

*/

PARAMS_VALIDATE_FAIL(400, "'参数校验失败"),

BUSINESS_DEAL_FAIL(500, "'业务处理失败");

/**

* 响应状态码

*/

int value;

/**

* 响应描述

*/

String message;

public int value() {

return this.value;

}

public String message() {

return this.message;

}

}

参数错误对应400状态码

3.遵循严格的pojo,vo,dto(来自阿里java规范)

4.建议提倡使用lomback(让你的代码,更加简洁,干净)

5.对于日志记录采用@Slf4j

以前可能是:

private static final Logger logger = LoggerFactory.getLogger(MeetingInfoController.class);

6.对于响应采用ResponseEntity,Spring已经封装好的,在一定程度上是能满足业务场景的

@PostMapping

public ResponseEntity save(@Valid @RequestBody UserDTO userDTO) {

userService.insert(userDTO);

return ResponseEntity.ok().build();

}

7.RESTful API对应以下Spring请求注解

@GetMapping 查询

@PostMapping 新增

@PutMapping 修改

@DeleteMapping 删除

8.进行必要的参数校验,新增参数校验,普通查询也有必要,如分页查询pageSize不做限制可能导致数据查询异常或慢查询

9.建议直接只用框架自带封装好的API,如RedisTemplate,RabbitTemplate,KafkaTemplate(自己写的通用的可能某些地方考虑不全)

10.使用注解事务@Transactional

import org.springframework.transaction.annotation.Transactional;

//spring的注解不是java注解

软件架构

软件架构说明

安装教程

xxxx

xxxx

xxxx

使用说明

xxxx

xxxx

xxxx

参与贡献

Fork 本仓库

新建 Feat_xxx 分支

提交代码

新建 Pull Request

码云特技

使用 Readme_XXX.md 来支持不同的语言,例如 Readme_en.md, Readme_zh.md

GVP 全称是码云最有价值开源项目,是码云综合评定出的优秀开源项目

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值