主题
使用kotlin 语言,加上spring-boot框架,使用gradle构建的restful风格的api应用,顺便熟悉kotlin语法特性
特性
- restful 风格api举例
- Token 身份验证,使用过滤器
- 方法级别权限控制api接口
- 处理异常,自定义返回结果
- servlet异步响应
- model数据处理
代码
http://gitter.com/blueswu/spring-boot-restful
处理异常自定返回
@RestController
class GreetingController {
@ExceptionHandler
@ResponseBody
fun handleServiceException(req:HttpServletRequest , response:HttpServletResponse , e:Exception ):ErrorResponse
{
var status = HttpStatus.OK.value()
status = when(e){
is AccessDeniedException -> HttpStatus.FORBIDDEN.value()
else -> status
}
if(status != 200){
val error = ErrorResponse(status,e.getLocalizedMessage())
response.setStatus(status)
return error
}
else throw e
}
}
servlet异步响应
- 入口处注册
EnableAsync
@SpringBootApplication
@EnableAsync
open class Application{
@Bean
@Qualifier(value = "taskExecutor")
open fun taskExecutor(): Executor {
val executor:ThreadPoolTaskExecutor = ThreadPoolTaskExecutor()
executor.setCorePoolSize(2)
executor.setMaxPoolSize(2)
executor.setQueueCapacity(500)
executor.setThreadNamePrefix("GithubLookup-")
executor.initialize()
return executor
}
}
- service处理类方法注册
Async
@Service
class LookService {
@Async("taskExecutor")
fun findUsers():CompletableFuture<User> {
val results:User =User(0,"all users")
Thread.sleep(5000L)
return CompletableFuture.completedFuture(results)
}
}
方法级别权限控制
- 安全设置
EnableGlobalMethodSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
open class WebSecurityConfig : WebSecurityConfigurerAdapter() {
}
- Controller注册
PreAuthorize
@RestController
class GreetingController {
@GetMapping
@PreAuthorize("hasRole('ADMIN')")
fun getUsers( ) {
}
}