Spring Boot应用建议及脚手架工程

规范详细说明

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<ExceptionResult>
     */
    @ExceptionHandler(ServiceException.class)
    public ResponseEntity<ExceptionResult> handleException(ServiceException e) {

        /**
         * 响应的状态码,为枚举中定义的状态码
         */
        return ResponseEntity.status(e.getExceptionEnum().value())
                .body(new ExceptionResult(e.getExceptionEnum()));
    }

    /**
     * 业务处理未知异常
     *
     * @param e 异常
     * @return ResponseEntity<ExceptionResult>
     */
    @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<String, Object> 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<Void> 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注解

源码地址:https://gitee.com/niugangxy/sprigboot-new-coding-standards

       微信公众号

?

JAVA程序猿成长之路

分享资源,记录程序猿成长点滴。专注于Java,Spring,SpringBoot,SpringCloud,分布式,微服务。

原文地址:https://www.cnblogs.com/niugang0920/p/12186618.html

时间: 2024-08-03 05:26:11

Spring Boot应用建议及脚手架工程的相关文章

Spring Boot 2 - 初识与新工程的创建

Spring Boot的由来 相信大家都听说过Spring框架. Spring从诞生到现在一直是流行的J2EE开发框架.随着Spring的发展,它的功能越来越强大,随之而来的缺点也越来越明显,以至于发展到后来变得越来越臃肿,使用起来也非常的麻烦.到后来由于过于强调配置的灵活性,有时即使只为了加入一个简单的特性,而需要相当多的XML配置,从而被人们诟病为"配置地狱"! 后来许多优秀的服务端框架涌现出来,比如基于JavaScript的nodeJS,基于Python的Django,Flask

Spring Boot? 使用Thymeleaf模板引擎渲染web视图

静态资源访问 在我们开发Web应用的时候,需要引用大量的js.css.图片等静态资源. 默认配置 Spring Boot默认提供静态资源目录位置需置于classpath下,目录名需符合如下规则: /static /public /resources /META-INF/resources 举例:我们可以在src/main/resources/目录下创建static,在该位置放置一个图片文件.启动程序后,尝试访问http://localhost:8080/D.jpg.如能显示图片,配置成功. 渲染

3.Spring Boot中使用Swagger2构建强大的RESTful API文档

原文:http://www.jianshu.com/p/8033ef83a8ed 由于Spring Boot能够快速开发.便捷部署等特性,相信有很大一部分Spring Boot的用户会用来构建RESTful API.而我们构建RESTful API的目的通常都是由于多终端的原因,这些终端会共用很多底层业务逻辑,因此我们会抽象出这样一层来同时服务于多个移动端或者Web前端. 这样一来,我们的RESTful API就有可能要面对多个开发人员或多个开发团队:IOS开发.Android开发或是Web开发

Spring Boot中使用Swagger2构建强大的RESTful API文档

由于Spring Boot能够快速开发.便捷部署等特性,相信有很大一部分Spring Boot的用户会用来构建RESTful API.而我们构建RESTful API的目的通常都是由于多终端的原因,这些终端会共用很多底层业务逻辑,因此我们会抽象出这样一层来同时服务于多个移动端或者Web前端. 这样一来,我们的RESTful API就有可能要面对多个开发人员或多个开发团队:IOS开发.Android开发或是Web开发等.为了减少与其他团队平时开发期间的频繁沟通成本,传统做法我们会创建一份RESTf

java版spring cloud+spring boot 社交电子商务平台(九)使用Swagger2构建强大的RESTful API文档(1)

由于Spring Boot能够快速开发.便捷部署等特性,相信有很大一部分Spring Boot的用户会用来构建RESTful API.而我们构建RESTful API的目的通常都是由于多终端的原因,这些终端会共用很多底层业务逻辑,因此我们会抽象出这样一层来同时服务于多个移动端或者Web前端. 这样一来,我们的RESTful API就有可能要面对多个开发人员或多个开发团队:IOS开发.Android开发或是Web开发等.为了减少与其他团队平时开发期间的频繁沟通成本,传统做法我们会创建一份RESTf

# 20分钟快速上手Spring Boot应用

20分钟快速上手Spring Boot应用 Spring Boot(简称SB)用于简化Spring应用的配置过程. 采用"习惯优于配置"的方式开发 学习SPB其实就是掌握它的各项约束与要求. 学习视频地址: http://www.itlaoqi.com/chapter/1647.html 前置准备 JDK 8以上版本 建议安装Intellj Idea Ultimate(旗舰版) 会用Maven和Spring MVC Spring Boot目录结构 /java Java源代码目录 /re

20分钟1快速上手Spring Boot应用

20分钟快速上手Spring Boot应用 Spring Boot(简称SB)用于简化Spring应用的配置过程. 采用"习惯优于配置"的方式开发 学习SPB其实就是掌握它的各项约束与要求. 学习视频: http://www.itlaoqi.com/chapter/1683.html 源码地址: QQ群 814077650 , 群共享中自助下载 老齐的官网: itlaoqi.com (更多干货就在其中) 前置准备 JDK 8以上版本 建议安装Intellj Idea Ultimate(

《深入实践Spring Boot》第1章 Spring Boot入门

目录 第1章 Spring Boot入门 1.1 配置开发环境 1.1.1 安装JDK 1.1.2 安装InterlliJ IDEA 1.1.3 安装Apache Maven 1.1.4 安装Git客户端 1.2 创建项目工程 1.2.1 使用Maven新建项目 1.2.2 使用Spring Initializr新建项目 1.3 使用Spring Boot 1.3.1 Maven依赖管理 1.3.2 一个简单的实例 1.4 运行与发布 1.4.1 在IDEA环境中运行 1.4.2 将应用打包发布

Spring Boot 2.x基础教程:使用Swagger2构建强大的API文档

随着前后端分离架构和微服务架构的流行,我们使用Spring Boot来构建RESTful API项目的场景越来越多.通常我们的一个RESTful API就有可能要服务于多个不同的开发人员或开发团队:IOS开发.Android开发.Web开发甚至其他的后端服务等.为了减少与其他团队平时开发期间的频繁沟通成本,传统做法就是创建一份RESTful API文档来记录所有接口细节,然而这样的做法有以下几个问题: 由于接口众多,并且细节复杂(需要考虑不同的HTTP请求类型.HTTP头部信息.HTTP请求内容