当前位置:网站首页>使用同一个接口实现不同登录的方式
使用同一个接口实现不同登录的方式
2022-07-22 22:08:00 【zhou_zhao_xu】
文章目录
- 定义父类DTO
package com.zzx.dto;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonSubTypes;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
import lombok.Data;
@Data
@JsonTypeInfo(
use = JsonTypeInfo.Id.NAME,
include = JsonTypeInfo.As.EXISTING_PROPERTY,
property = "productCode",
visible = true)
@JsonSubTypes({
@JsonSubTypes.Type(value = UserPasswordDTO.class, name = LoginDTO.USERNAME_PASSWORD),
@JsonSubTypes.Type(value = UserPhoneDTO.class,name = LoginDTO.PHONE_SMS_PRODUCT),
})
@JsonIgnoreProperties(ignoreUnknown = true)
public class LoginDTO {
public static final String PHONE_SMS_PRODUCT = "phoneSms";
public static final String USERNAME_PASSWORD = "password";
private String productCode;
public LoginDTO() {
}
}
定义需要登录类型的子类
- 账号密码登录
package com.zzx.dto; import lombok.Data; @Data public class UserPasswordDTO extends LoginDTO { private String userName; private String password; @Override public String getProductCode() { return LoginDTO.USERNAME_PASSWORD; } } - 手机号验证码登录
package com.zzx.dto; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @Data public class UserPhoneDTO extends LoginDTO { /** * 区位码 */ private String areaCode; /** * 手机号 */ private String phoneNum; /** * 验证码 */ private String verifyCode; @Override public String getProductCode() { return LoginDTO.PHONE_SMS_PRODUCT; } }
- 账号密码登录
测试(注意,传入的 productCode 必须和在@JsonSubTypes.Type中定义好的name的值一致 )
package com.zzx;
import java.util.HashMap;
import java.util.Map;
import com.alibaba.fastjson.JSON;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.zzx.dto.LoginDTO;
import com.zzx.dto.UserPasswordDTO;
import com.zzx.dto.UserPhoneDTO;
public class LoginTest {
public static void main(String[] args) throws JsonProcessingException {
Map<String, String> params = new HashMap<>();
params.put("productCode", "password");
params.put("userName", "userName");
params.put("password", "password");
params.put("phoneNum", null);
params.put("verifyCode", null);
ObjectMapper mapper = new ObjectMapper();
String res = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(params);
LoginDTO loginDTO = mapper.readValue(res, LoginDTO.class);
System.out.println("loginDTO : "+JSON.toJSONString(loginDTO));
if (loginDTO instanceof UserPasswordDTO){
System.out.println("userPassword : "+JSON.toJSONString(loginDTO));
}
if (loginDTO instanceof UserPhoneDTO){
System.out.println("userPhone : "+JSON.toJSONString(loginDTO));
}
}
}
边栏推荐
- 树以及二叉树的常用性质以及遍历
- Talking about performance optimization: analysis and optimization of APP startup process
- 老板要我做一个 IP 属地功能,一个开源库搞定!
- VMware virtual machine changes static IP and hostname, and uses xshell to connect
- Niuke Xiaobai month race 53
- 挖财和启牛都是干什么的开户安全吗?
- Can the formatted data of the USB flash disk be recovered? How to recover the formatted data of the USB flash disk
- Worthington:来自酵母的己糖激酶的特性及其它参数说明
- 实验四 DPCM
- 实验六 MPEG
猜你喜欢
随机推荐
初出茅庐的小李第111篇博客之中英文点阵字符显示原理
实验三 LZW
Codeforces round 809 (Div. 2) (Questions C and D1)
General, special and hidden attributes of the file (instance generates animation)
Go 语言的 RSA 用秘钥解析JSEncrypt.js 这个库加密的密文失败
读书笔记->统计学】12-02 置信区间的构建-t分布概念简介
C voice realizes TCP client and TCP server, and QT call test
Qt文档阅读笔记-QAudioInput&QAudioFormat解析与实例
PostgreSQL database master-slave deployment master database suspended restore master database
SLAAC 无状态地址自动配置
Etcdv3 · watch operation implementation and relevant key instructions
Simulate not all endpoints registered exceptions and Solutions
pip更新一个package
将childNodes返回的伪数组转化为真数组
There are 13 detailed methods for JMeter to view the response of the result tree!
昇思易点通 | 经典卷积神经网络的深度学习解析
【干货原创】发现了一个好用到爆的数据分析利器
Internet traffic scheduling scheme
Web resource sharing
matlab 分数阶pid控制









