# Magician-Web
# 初始化配置
# 引入依赖
在Magician项目的基础上 添加这个依赖
<dependency>
<groupId>com.github.yuyenews</groupId>
<artifactId>Magician-Web</artifactId>
<version>2.0.3</version>
</dependency>
# 创建核心Handler
只允许有一个HttpHandler,这个Handler作为分发器,将请求分发给Controller
@HttpHandler(path="/")
public class DemoHandler implements HttpBaseHandler {
@Override
public void request(MagicianRequest magicianRequest, MagicianResponse response) {
try{
// 主要是这句
MagicianWeb.request(magicianRequest);
} catch (Exception e){
}
}
}
# 修改扫描范围
- 扫描范围 需要包含【handler,controller,拦截器 所在的包名】
- 多个可以逗号分割,也可以直接配置成 他们的父包名
Magician.createHttp()
.scan("扫描范围需要包含 handler,controller,拦截器")
.bind(8080);
# 正式使用
# 创建Controller
@Route("/demoController")
public class DemoController {
// 可以使用实体类接收参数,支持任意请求方式
@Route(value = "/demo", requestMethod = ReqMethod.POST)
public DemoVO demo(DemoVO demoVO){
return demoVO;
}
// 也可以使用传统的方式接收参数,调用request里面的方法获取参数
// 这里的接收方式,可以往上翻,看标题《接收参数》
// 这种方式可以跟 上面提到的 实体类接收参数 混用
@Route(value = "/demob", requestMethod = ReqMethod.POST)
public String demob(MagicianRequest request){
request.getParam("name");
return "ok";
}
// 文件下载,只需要返回 ResponseInputStream 即可
@Route(value = "/demob", requestMethod = ReqMethod.POST)
public ResponseInputStream demob(){
ResponseInputStream responseInputStream = new ResponseInputStream();
responseInputStream.setName("file name");
responseInputStream.setBytes(file bytes);
return responseInputStream;
}
}
# 传统方式接收参数
这里只是简单的列举一下,具体的可以看上面的《接收参数》
// 获取 表单 以及 formData 提交的参数
request.getParam("参数name");
// formaData提交,获取文件
request.getFile("参数name");
// 获取请求头
request.getRequestHeader("请求头name");
// 获取json提交的参数
request.getJsonParam();
# 实体接收参数
public class ParamVO {
// ----- 字段名称 要跟 请求的参数name一致;如果是json传参,这个实体类只要跟json的结构保持一致即可-----
// 普通参数
private Integer id;
private String name;
private String[] ids
// 文件参数
private MixedFileUpload mixedFileUpload;
private MixedFileUpload[] mixedFileUploads;
// ----- 需要get, set,这里就不写了,节约点篇幅 -----
}
# 参数自动校验
在字段上 加上注解即可
// 不可为空,且大小在10-100之间
@Verification(notNull = true, max = "100", min = "10", msg = "id不可为空且大小必须在10-100之间")
private Integer id;
// 正则校验
@Verification(reg = "^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{6,12}$",msg = "密码不可以为空且必须是6-12位数字字母组合")
private String password;
# 属性解释
- notNull:是否为空,设置为true说明不可为空,对基本类型无效(不能赋值为null的类型都无效)
- max:最大值,只对int,double,float,BigDecimal等数字类型有效
- min:最小值,只对int,double,float,BigDecimal等数字类型有效
- msg:校验不通过的时候,返回前端的提示文字
- reg:正则表达式,只对String类型有效
# 创建拦截器
创建一个普通的类,实现 MagicianInterceptor 接口即可
- 在类上面添加 @Interceptor(pattern = "*") 注解
- pattern属性为拦截规则,全部拦截 配置 * 即可,否则的话,必须以 / 开头
- 如果拦截器顺利放行的话,返回SUCCESS就好了,如果不给通过,那么直接返回 错误提示信息(返回对象会自定转成json)
@Interceptor(pattern = "/demoController/*")
public class DemoInter implements MagicianInterceptor {
/**
* 接口执行之前
* @param magicianRequest
* @return
*/
@Override
public Object before(MagicianRequest magicianRequest) {
System.out.println(magicianRequest);
return SUCCESS;
}
/**
* 接口执行之后
* @param magicianRequest
* @param o 接口返回的数据
* @return
*/
@Override
public Object after(MagicianRequest magicianRequest, Object o) {
System.out.println(o);
return SUCCESS;
}
}
# JWT管理
创建一个jwt管理对象, 每次builder都是一个新的对象,所以务必写一个静态的工具类来管理
JwtManager jwtManager = JwtManager
.builder()
.setSecret("秘钥")
.setCalendarField(Calendar.MILLISECOND) // 过期时间单位,默认:毫秒
.setCalendarInterval(86400);// 过期时间,默认86400
创建token
String token = jwtManager.createToken(要存入的对象);
还原token
原对象类 原对象 = jwtManager.getObject("token字符串", 原对象类.class);