网站建设高,上海优质建筑设计网公司,重庆网站开发公,wordpress英文版切换中文版sprigboot-new-coding-standards介绍SpringBoot脚手架#xff0c;遵守严格的代码规范。规范详细说明1.遵循标准RESTful API2.异常采用枚举进行封装(业务内部异常往上抛#xff0c;返回客户端需要将对应的异常转换为具体的状态的#xff0c;这里介绍Spring提供的全局异常处理…sprigboot-new-coding-standards介绍SpringBoot脚手架遵守严格的代码规范。规范详细说明1.遵循标准RESTful API2.异常采用枚举进行封装(业务内部异常往上抛返回客户端需要将对应的异常转换为具体的状态的这里介绍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*/ControllerAdviceSlf4jpublic 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 错误描述NoArgsConstructorAllArgsConstructorpublic 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已经封装好的在一定程度上是能满足业务场景的PostMappingpublic 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.使用注解事务Transactionalimport org.springframework.transaction.annotation.Transactional;//spring的注解不是java注解软件架构软件架构说明安装教程xxxxxxxxxxxx使用说明xxxxxxxxxxxx参与贡献Fork 本仓库新建 Feat_xxx 分支提交代码新建 Pull Request码云特技使用 Readme_XXX.md 来支持不同的语言例如 Readme_en.md, Readme_zh.mdGVP 全称是码云最有价值开源项目是码云综合评定出的优秀开源项目