aillamsun / spring-boot-with-kotlin

spring-boot kotlin example

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

spring-boot-with-kotlin

spring-boot kotlin example

技术介绍

> * 使用spring boot2.0.0M5 ,Spring5.0.0 通用 Mybatis PageHeper

> * 使用 java8 + Kotlin 

基本功能

> * 1 集成mybatis 通用mapper 和 分页
> * 2 封装统一异常处理
> * 3 全局分组参数验证
> * 4 全局接口返回格式统一封装

1 异常部分

自定义异常

/**
 * 数据查询异常
 * Created by sungang on 2017/11/10.
 */
abstract class DataNotFoundException : BaseException, MessageSourceResolvable {


    constructor(message: String) : super(message) {
    }

    constructor(message: String, cause: Throwable) : super(message, cause) {
    }

    override fun getArguments(): Array<out Any>? = arrayOf()
    override fun getDefaultMessage(): String? = message
}

/**
 * 用户找不到
 */
class UserNotFoundException(val userId: Long) : DataNotFoundException("用户(ID:${userId}) 不存在!") {
    override fun getCodes(): Array<out String> = arrayOf("error.userNotFound")
    override fun getArguments(): Array<out Any> = arrayOf(userId)
}

统一异常处理

/**
 *
 * 统一异常处理
 * Created by sungang on 2017/11/10.
 */
@Slf4j
@RestControllerAdvice
class GlobalExceptionHandler @Autowired constructor(var messageSource: MessageSource) {

    /**
     * 全局异常
     */
    @ExceptionHandler(BaseException::class)
    fun baseException(exception: BaseException, locale: Locale) =
            serverError(messageSource.getMessage(exception, locale))

    /**
     * 数据资源找不到异常
     */
    @ExceptionHandler(DataNotFoundException::class)
    fun resourceNotFoundException(exception: DataNotFoundException, locale: Locale) =
            notFound(messageSource.getMessage(exception, locale))

    /**
     * 参数验证异常
     */
    @ExceptionHandler(MethodArgumentNotValidException::class)
    fun methodArgumentNotValidException(exception: MethodArgumentNotValidException, locale: Locale) =
            badReqeust("参数不正确.", mapBindingResult(exception.bindingResult, locale));

    @ExceptionHandler(BindException::class)
    fun bindException(exception: BindException, locale: Locale) =
            badReqeust("参数不正确.", mapBindingResult(exception.bindingResult, locale));


    fun mapBindingResult(bindingResult: BindingResult, locale: Locale) =
            bindingResult.allErrors.map { messageSource.getMessage(it, locale) }
}

2 参数验证部分

验证规则

@NoArgsConstructor
@AllArgsConstructor
@Table(name = "user")
@Data
class User(


        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        @ApiModelProperty(hidden = true)
        var id: Long,


        @field:NotNull(message = "用户名不能为空!", groups = arrayOf(DataForm.Write::class, DataForm.Edit::class))
        @ApiModelProperty(value = "账号")
        var account: String? = null,


        @field:NotNull(message = "密码不能为空!", groups = arrayOf(DataForm.Write::class, DataForm.Edit::class))
        @ApiModelProperty(value = "密码")
        var password: String? = null,


        @ApiModelProperty(hidden = true)
        @Column(name = "create_time")
        var createTime: Timestamp? = null

) : BaseModel()

验证案例

 @ApiOperation(value = "添加用户", response = ResultBody::class)
    @PostMapping
    fun addUser(@RequestBody user: User, bindingResult: BindingResult): ResultBody {
        /**
         * 验证数据
         */
        validator.validateAndThrow(user, bindingResult, DataForm.Write::class.java)

        userService.insert(user);
        return ResultGenerator.genSuccessResult();
    }

分组定义

/**
 *
 * 验证分组
 * Created by sungang on 2017/11/10.
 */
class DataForm() {
    interface Write

    interface Edit
}

3 项目启动

  • resources/spring-boot-kotlin.sql
  • com.william.kt.SpringBootWithKotlinApplication

About

spring-boot kotlin example


Languages

Language:Kotlin 74.3%Language:Shell 13.1%Language:Batchfile 10.1%Language:PLpgSQL 2.5%