当前位置:网站首页>使用同一个接口实现不同登录的方式
使用同一个接口实现不同登录的方式
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));
}
}
}
边栏推荐
- Experiment III LZW
- [reading notes > statistics] 12-01 construction of confidence interval - Introduction to the concept of confidence interval
- Arduino中断实现上升沿检测,并执行其他函数
- 挖财和启牛都是干什么的开户安全吗?
- Binary tree (learning daily)
- Fledgling Xiao Li's 108th blog binary print
- 技术干货 | 数据处理好难?来看MindSpore提供的解决思路!
- 怎么使用selenium.chrome实现扩展拦截或转发请求功能
- Hcip --- BGP comprehensive experiment
- Restclient operation index library - initialize restclient
猜你喜欢

Three things programmers want to do most | comics

项目升级遇到的坑

1.10 API and string

读书笔记->统计学】12-02 置信区间的构建-t分布概念简介

matlab 分数阶pid控制

Fastapi learning (II) -- fastapi+jinjia2 template rendering web page (jump back to the rendering page)

QT document reading notes - qaudioinput & qaudioformat parsing and examples

Web资源共享

Experiment 2 YUV

postgresql数据库主从部署 主库挂了重新还原主库
随机推荐
挖财和启牛都是干什么的开户安全吗?
JVM监控工具介绍jstack, jconsole, jinfo, jmap, jdb, jstat
高精度移相(MCP41xx)程序stm32F103,F407通用,更改引脚即可(SPI软件模拟通信)
Worthington羟基类固醇脱氢酶技术说明及测定方案
php可不可以拆分数组
初出茅庐的小李第110篇博客之详细剖析STM32中__NVIC_SetPriorityGrouping(uint32_t PriorityGroup)函数
大咖访谈 | 开源社区里各种奇怪的现状——夜天之书陈梓立tison
Introduction to JVM monitoring tools jstack, jconsole, Jinfo, jmap, JDB, jstat
Live broadcast preview | live broadcast Seminar on open source security governance models and tools
实验四 DPCM
How to use C language to realize simple employee information management system
93.(leaflet篇)leaflet态势标绘-进攻方向修改
The boss asked me to do an IP territorial function and an open source library!
matlab声音信号处理 频率图 信号过滤和播放声音
主控芯片CSU18M92开发智能体重秤方案
Redis 事务学习有感
Fastapi learning (II) -- fastapi+jinjia2 template rendering web page (jump back to the rendering page)
1.11 ArrayList & student management system
Expérience II Yuv
Three things programmers want to do most | comics