Compare commits

..

No commits in common. 'c305af6a6bb2b698b02d731ac27218bff51c5c1c' and '8b6cd8d740d2aa89dcf1e2a7dda395dcc4a5c9d4' have entirely different histories.

  1. 4
      README.md
  2. 6
      pom.xml
  3. 11
      src/main/java/com/company/project/configurer/WebMvcConfigurer.java
  4. 8
      src/main/java/com/company/project/core/Result.java
  5. 2
      src/main/java/com/company/project/core/ResultGenerator.java

@ -13,7 +13,7 @@ Spring Boot API Project Seed 是一个基于Spring Boot & MyBatis的种子项目
- 使用Druid Spring Boot Starter 集成Druid数据库连接池与监控 - 使用Druid Spring Boot Starter 集成Druid数据库连接池与监控
- 使用FastJsonHttpMessageConverter,提高JSON序列化速度 - 使用FastJsonHttpMessageConverter,提高JSON序列化速度
- 集成MyBatis、通用Mapper插件、PageHelper分页插件,实现单表业务零SQL - 集成MyBatis、通用Mapper插件、PageHelper分页插件,实现单表业务零SQL
- 提供代码生成器根据表名生成对应的Model、Mapper、MapperXML、Service、ServiceImpl、Controller等基础代码,其中Controller模板默认提供POST和RESTful两套,根据需求在```CodeGenerator.genController(tableName)```方法中自己选择,默认使用POST模板。代码模板可根据实际项目的需求来扩展,由于每个公司业务都不太一样,所以只提供了一些比较基础、通用的模板,**主要是提供一个思路**来减少重复代码的编写,我在实际项目的使用中,其实根据公司业务的抽象编写了大量的模板。另外,使用模板也有助于保持团队代码风格的统一 - 提供代码生成器根据表名生成对应的Model、Mapper、MapperXML、Service、ServiceImpl、Controller等基础代码,其中Controller模板默认提供POST和RESTful两套,根据需求在```CodeGenerator.genController(tableName)```方法中自己选择,默认使用POST模板。代码模板可根据实际项目的需求来扩展,由于每个公司业务都不太一样,所以只提供了一些比较基础、通用的模板,主要是提供一个思路来减少重复代码的编写,我在实际项目的使用中,其实根据公司业务的抽象编写了大量的模板。另外,使用模板也有助于保持团队代码风格的统一
- 另有彩蛋,待你探索 - 另有彩蛋,待你探索
   
## 快速开始 ## 快速开始
@ -29,7 +29,7 @@ Spring Boot API Project Seed 是一个基于Spring Boot & MyBatis的种子项目
- Model内成员变量建议与表字段数量对应,如需扩展成员变量(比如连表查询)建议创建DTO,否则需在扩展的成员变量上加```@Transient```注解,详情见[通用Mapper插件文档说明](https://mapperhelper.github.io/docs/2.use/) - Model内成员变量建议与表字段数量对应,如需扩展成员变量(比如连表查询)建议创建DTO,否则需在扩展的成员变量上加```@Transient```注解,详情见[通用Mapper插件文档说明](https://mapperhelper.github.io/docs/2.use/)
- 建议业务失败直接使用```ServiceException("message")```抛出,由统一异常处理器来封装业务失败的响应结果,比如```throw new ServiceException("该手机号已被注册")```,会直接被封装为```{"code":400,"message":"该手机号已被注册"}```返回,无需自己处理,尽情抛出 - 建议业务失败直接使用```ServiceException("message")```抛出,由统一异常处理器来封装业务失败的响应结果,比如```throw new ServiceException("该手机号已被注册")```,会直接被封装为```{"code":400,"message":"该手机号已被注册"}```返回,无需自己处理,尽情抛出
- 需要工具类的话建议先从```apache-commons-*```和```guava```中找,实在没有再造轮子或引入类库,尽量精简项目 - 需要工具类的话建议先从```apache-commons-*```和```guava```中找,实在没有再造轮子或引入类库,尽量精简项目
- 开发规范建议遵循阿里巴巴Java开发手册([最新版下载](https://github.com/alibaba/p3c)) - 开发规范建议遵循阿里巴巴Java开发手册([最新版下载](https://github.com/lihengming/java-codes/blob/master/shared-resources/%E9%98%BF%E9%87%8C%E5%B7%B4%E5%B7%B4Java%E5%BC%80%E5%8F%91%E6%89%8B%E5%86%8CV1.3.0.pdf))
- 建议在公司内部使用[ShowDoc](https://github.com/star7th/showdoc)、[SpringFox-Swagger2](https://github.com/springfox/springfox) 、[RAP](https://github.com/thx/RAP)等开源项目来编写、管理API文档 - 建议在公司内部使用[ShowDoc](https://github.com/star7th/showdoc)、[SpringFox-Swagger2](https://github.com/springfox/springfox) 、[RAP](https://github.com/thx/RAP)等开源项目来编写、管理API文档
   
## 技术选型&文档 ## 技术选型&文档

@ -17,7 +17,7 @@
<parent> <parent>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId> <artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.13.RELEASE</version> <version>1.5.9.RELEASE</version>
</parent> </parent>
<dependencies> <dependencies>
@ -81,13 +81,13 @@
<dependency> <dependency>
<groupId>com.alibaba</groupId> <groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId> <artifactId>fastjson</artifactId>
<version>1.2.47</version> <version>1.2.44</version>
</dependency> </dependency>
<!--阿里 Druid Spring Boot Starter依赖--> <!--阿里 Druid Spring Boot Starter依赖-->
<dependency> <dependency>
<groupId>com.alibaba</groupId> <groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId> <artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.10</version> <version>1.1.6</version>
</dependency> </dependency>
<!--代码生成器依赖--> <!--代码生成器依赖-->
<dependency> <dependency>

@ -3,7 +3,6 @@ package com.company.project.configurer;
import java.io.IOException; import java.io.IOException;
import java.nio.charset.Charset; import java.nio.charset.Charset;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
@ -25,7 +24,6 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
import org.springframework.http.MediaType;
import org.springframework.http.converter.HttpMessageConverter; import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.web.method.HandlerMethod; import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.HandlerExceptionResolver; import org.springframework.web.servlet.HandlerExceptionResolver;
@ -51,14 +49,11 @@ public class WebMvcConfigurer extends WebMvcConfigurerAdapter {
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) { public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
FastJsonHttpMessageConverter converter = new FastJsonHttpMessageConverter(); FastJsonHttpMessageConverter converter = new FastJsonHttpMessageConverter();
FastJsonConfig config = new FastJsonConfig(); FastJsonConfig config = new FastJsonConfig();
config.setSerializerFeatures(SerializerFeature.WriteMapNullValue);//保留空的字段 config.setSerializerFeatures(SerializerFeature.WriteMapNullValue,//保留空的字段
//SerializerFeature.WriteNullStringAsEmpty,//String null -> "" SerializerFeature.WriteNullStringAsEmpty,//String null -> ""
//SerializerFeature.WriteNullNumberAsZero//Number null -> 0 SerializerFeature.WriteNullNumberAsZero);//Number null -> 0
// 按需配置,更多参考FastJson文档哈
converter.setFastJsonConfig(config); converter.setFastJsonConfig(config);
converter.setDefaultCharset(Charset.forName("UTF-8")); converter.setDefaultCharset(Charset.forName("UTF-8"));
converter.setSupportedMediaTypes(Arrays.asList(MediaType.APPLICATION_JSON_UTF8));
converters.add(converter); converters.add(converter);
} }

@ -5,10 +5,10 @@ import com.alibaba.fastjson.JSON;
/** /**
* 统一API响应结果封装 * 统一API响应结果封装
*/ */
public class Result<T> { public class Result {
private int code; private int code;
private String message; private String message;
private T data; private Object data;
public Result setCode(ResultCode resultCode) { public Result setCode(ResultCode resultCode) {
this.code = resultCode.code(); this.code = resultCode.code();
@ -28,11 +28,11 @@ public class Result<T> {
return this; return this;
} }
public T getData() { public Object getData() {
return data; return data;
} }
public Result setData(T data) { public Result setData(Object data) {
this.data = data; this.data = data;
return this; return this;
} }

@ -12,7 +12,7 @@ public class ResultGenerator {
.setMessage(DEFAULT_SUCCESS_MESSAGE); .setMessage(DEFAULT_SUCCESS_MESSAGE);
} }
public static <T> Result<T> genSuccessResult(T data) { public static Result genSuccessResult(Object data) {
return new Result() return new Result()
.setCode(ResultCode.SUCCESS) .setCode(ResultCode.SUCCESS)
.setMessage(DEFAULT_SUCCESS_MESSAGE) .setMessage(DEFAULT_SUCCESS_MESSAGE)

Loading…
Cancel
Save