Appearance
RestFull API
Controller中直接使用
java
@PostMapping("/chat")
public HashMap chatDialogue() {
HashMap m = new HashMap();
m.put("age", 26);
m.put("name", "Judy");
return m;
}
Result构建返回
java
@PostMapping("/chat")
public Result chatDialogue() {
HashMap m = new HashMap();
m.put("age", 26);
m.put("name", "Judy");
return Result.buildSuccess(m);
}
分页支持
我们在日常中分页是一个比较特殊返回。也是非常常用的。
java
@PostMapping("/page")
@Log("分页查询用户数据")
public Result page(@Validated EntityParam s) {
ResultPage<List<EntityParam>> resultPage=new ResultPage<>();
List a=new ArrayList();
a.add(s);
resultPage.setPageData(a);
return ResultPage.buildSuccess(resultPage);
}
- 构建自定义自己的分页数据
java
ResultPage<List<EntityParam>> resultPage=new ResultPage<>();
- 通过
ResultPage.buildSuccess(resultPage)
进行构建返回
返回统一响应格式
json
{
"previousPage": 1,
"nextPage": 1,
"pageSize": 1,
"totalPageSize": 1,
"hasNext": "false",
"success": true,
"code": "OK",
"msg": "操作成功",
"requestId": "D9AMALgkZ6gVfe6Pi0Oh",
"timestamp": "2023-07-09 02:39:40",
"data": [
{
"name": "judy",
"hobby": "swing",
"age": 18
}
]
}
自定义返回格式
json
{
"previousPage": 1,
"nextPage": 1,
"pageSize": 1,
"totalPageSize": 1,
"hasNext": "false",
"success": true,
"code": "OK",
"msg": "操作成功",
"requestId": "D9AMALgkZ6gVfe6Pi0Oh",
"timestamp": "2023-07-09 02:39:40",
"data": [
{
"name": "judy",
"hobby": "swing",
"age": 18
}
]
}
上述统一返回格式,可能不符合你项目中接口统一格式如:
yml
{
"success": true,
"code": "OK",
"msg": "操作成功",
"requestId": "ztf4S-lP9yrtKPSiwldZ",
"timestamp": "2023-07-11 13:46:53",
"data": {
"previousPage": 1,
"nextPage": 1,
"pageSize": 1,
"totalPageSize": 1,
"hasNext": "false",
"pageData": [
{
"name": "judy",
"hobby": "swing",
"age": 18
}
]
}
}
page
分页数据是在data
里面你可以定义pageWrap
属性true
包装返回定义pageData
的key
值如records
等
你需要自定义key
如 msg
你可能对应message
,success
你可能对应status
只需要在配置文件中配置自定义key
自定义返回成功值你的成功返回可能是200
你可以配置code-success-value
值
yml
rest-api:
enabled: false
msg: msg
code: code
code-success-value: OK
success: success
previousPage: previousPage
nextPage: nextPage
pageSize: pageSize
hasNext: hasNext
totalPageSize: totalPageSize
data: info
当 enabled
开启后会读取你自定义配置的key
如
yml
rest-api:
enabled: true
msg: msg1
code: code1
code-success-value: 200
success: success1
previousPage: previousPage1
nextPage: nextPage1
pageSize: pageSize1
hasNext: hasNext1
totalPageSize: totalPageSize1
data: info
对应返回内容
json
{
"success": true,
"code": "OK",
"msg": "操作成功",
"requestId": "ztf4S-lP9yrtKPSiwldZ",
"timestamp": "2023-07-11 13:46:53",
"data": {
"previousPage": 1,
"nextPage": 1,
"pageSize": 1,
"totalPageSize": 1,
"hasNext": "false",
"pageData": [
{
"name": "judy",
"hobby": "swing",
"age": 18
}
]
}
}
自定义返回
有时候我们需要自定义返回。不去包装统一响应RestFull API
格式
- 可以通过注解
@NoRestFulApi
实现如
java
@GetMapping("/test")
@NoRestFulApi
public Map chatDialogue() {
Map m= new HashMap<>();
m.put("name","judy");
m.put("age",26);
return m;
}
- 通过类扫描去实现 默认会过滤
String
类型认为是页面路径。
通过属性配置文件include-packages
需要统一返回包。exclude-packages
不需统一返回的包
yml
include-packages: cn.soboys.superaide.controller
exclude-packages: xx.xxx.xxx
接口限流
在正式项目中有些接口需要做限流的。比如 短信接口
。登录接口
等。 我封装了@Limit
注解
java
@GetMapping("/chat")
@Log("日志记录测试")
@Limit(key = "chat",name="接口限流",period=10,count=3)
public Result chatDialogue() {
return Result.buildSuccess("接口限流测试");
}
period
时间范围,单位秒count
限制访问次数 LimitType
限制类型
错误国际化支持
内置常见的错误。可以看HttpStatus。默认错误支持中文和英文两种国际化。配置如下
yml
i18n:
# 若前端无header传参则返回中文信息
i18n-header: Lang
default-lang: cn
message:
# admin
internal_server_error:
en: Internal Server Error
cn: 系统错误
bad_gateway:
en: Bad Gateway
cn: 错误的请求
unauthorized:
en: Unauthorized
cn: 未授权
forbidden:
en: Forbidden
cn: 资源禁止访问
method_not_allowed:
en: Method Not Allowed
cn: 方法不被允许
request_timeout:
en: Request Timeout
cn: 请求超时
invalid_argument:
en: Invalid Argument {}
cn: 参数错误 {}
argument_analyze:
en: Argument Analyze {}
cn: 参数解析异常 {}
business_exception:
en: Business Exception
cn: 业务错误
not_found:
en: Not Found
cn: 请求资源不存在
可以自行覆盖扩充
全局错误拦截和响应
默认拦所有未知错误异常和validation
参数校验失败异常,以及Http请求异常。 还有全局自定义BusinessException 业务异常 自动集成spring-boot-starter-validation
你项目中不需要再单独引入
xml
<!--参数校验-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
也内置扩展了许多自定义参数校验参考