boot返回码规范 spring_sprigboot-new-coding-standards
sprigboot-new-coding-standards
介紹
SpringBoot腳手架,遵守嚴(yán)格的代碼規(guī)范。
規(guī)范詳細(xì)說明
1.遵循標(biāo)準(zhǔn)RESTful API
2.異常采用枚舉進(jìn)行封裝(業(yè)務(wù)內(nèi)部異常往上拋,返回客戶端需要將對應(yīng)的異常轉(zhuǎn)換為具體的狀態(tài)的,這里介紹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 {
/**
* 具體業(yè)務(wù)層異常
*
* @param e 業(yè)務(wù)異常
* @return ResponseEntity
*/
@ExceptionHandler(ServiceException.class)
public ResponseEntity handleException(ServiceException e) {
/**
* 響應(yīng)的狀態(tài)碼,為枚舉中定義的狀態(tài)碼
*/
return ResponseEntity.status(e.getExceptionEnum().value())
.body(new ExceptionResult(e.getExceptionEnum()));
}
/**
* 業(yè)務(wù)處理未知異常
*
* @param e 異常
* @return ResponseEntity
*/
@ExceptionHandler(Exception.class)
public ResponseEntity> exceptionResultResponseEntity(Exception e) {
//所有參數(shù)異常
//在對象上綁定校驗(yàn)如(UserDTO)
if (e instanceof BindException || e instanceof MethodArgumentNotValidException || e instanceof IllegalArgumentException) {
log.error("參數(shù)校驗(yàn)失敗:{}", e);
return ResponseEntity.status(ExceptionEnum.PARAMS_VALIDATE_FAIL.value())
.body(new ExceptionResult(ExceptionEnum.PARAMS_VALIDATE_FAIL));
}
//方法上參數(shù)校驗(yàn)失敗
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("服務(wù)器內(nèi)部異常:{}", e);
/*
* 響應(yīng)的狀態(tài)碼,為枚舉中定義的狀態(tài)碼
*/
return ResponseEntity.status(ExceptionEnum.BUSINESS_DEAL_FAIL.value())
.body(new ExceptionResult(ExceptionEnum.BUSINESS_DEAL_FAIL));
}
}
value 對應(yīng)響應(yīng)狀態(tài)碼
message 錯(cuò)誤描述
@NoArgsConstructor
@AllArgsConstructor
public enum ExceptionEnum {
/**
*
*/
PARAMS_VALIDATE_FAIL(400, "'參數(shù)校驗(yàn)失敗"),
BUSINESS_DEAL_FAIL(500, "'業(yè)務(wù)處理失敗");
/**
* 響應(yīng)狀態(tài)碼
*/
int value;
/**
* 響應(yīng)描述
*/
String message;
public int value() {
return this.value;
}
public String message() {
return this.message;
}
}
參數(shù)錯(cuò)誤對應(yīng)400狀態(tài)碼
3.遵循嚴(yán)格的pojo,vo,dto(來自阿里java規(guī)范)
4.建議提倡使用lomback(讓你的代碼,更加簡潔,干凈)
5.對于日志記錄采用@Slf4j
以前可能是:
private static final Logger logger = LoggerFactory.getLogger(MeetingInfoController.class);
6.對于響應(yīng)采用ResponseEntity,Spring已經(jīng)封裝好的,在一定程度上是能滿足業(yè)務(wù)場景的
@PostMapping
public ResponseEntity save(@Valid @RequestBody UserDTO userDTO) {
userService.insert(userDTO);
return ResponseEntity.ok().build();
}
7.RESTful API對應(yīng)以下Spring請求注解
@GetMapping 查詢
@PostMapping 新增
@PutMapping 修改
@DeleteMapping 刪除
8.進(jìn)行必要的參數(shù)校驗(yàn),新增參數(shù)校驗(yàn),普通查詢也有必要,如分頁查詢pageSize不做限制可能導(dǎo)致數(shù)據(jù)查詢異常或慢查詢
9.建議直接只用框架自帶封裝好的API,如RedisTemplate,RabbitTemplate,KafkaTemplate(自己寫的通用的可能某些地方考慮不全)
10.使用注解事務(wù)@Transactional
import org.springframework.transaction.annotation.Transactional;
//spring的注解不是java注解
軟件架構(gòu)
軟件架構(gòu)說明
安裝教程
xxxx
xxxx
xxxx
使用說明
xxxx
xxxx
xxxx
參與貢獻(xiàn)
Fork 本倉庫
新建 Feat_xxx 分支
提交代碼
新建 Pull Request
碼云特技
使用 Readme_XXX.md 來支持不同的語言,例如 Readme_en.md, Readme_zh.md
GVP 全稱是碼云最有價(jià)值開源項(xiàng)目,是碼云綜合評定出的優(yōu)秀開源項(xiàng)目
總結(jié)
以上是生活随笔為你收集整理的boot返回码规范 spring_sprigboot-new-coding-standards的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 软件工程第二篇博客(“相等”)
- 下一篇: 老男孩linux运维50期