河北住房和城乡建设厅网站电话,南通营销网站制作,义乌企业网站设计,wordpress的mysql扩展目录 一. 案例1二. 案例2三. 案例3四. 案例4 枚举类聚合封装消息 一. 案例1 涉及到EnumMap的实际使用 ⏹定义一个枚举类#xff0c;用来表示日本的各种支付方法对应的code
import com.fasterxml.jackson.annotation.JsonFormat;// 让jackson将前台的数据封装数据到枚举类中
J… 目录 一. 案例1二. 案例2三. 案例3四. 案例4 枚举类聚合封装消息 一. 案例1 涉及到EnumMap的实际使用 ⏹定义一个枚举类用来表示日本的各种支付方法对应的code
import com.fasterxml.jackson.annotation.JsonFormat;// 让jackson将前台的数据封装数据到枚举类中
JsonFormat(shape JsonFormat.Shape.OBJECT)
public enum PayEnum {RAKUTEN_PAY(1),PAY_PAY(2),ID_PAY(3);private String code;PayEnum(String code) {this.code code;}public String getCode() {return code;}
}⏹用来接收前台的数据的form实体类
import lombok.Data;Data
public class PayForm {// 自定义的枚举类private PayEnum payMethod;private String msg;
}⏹支付接口以及其实现类
// 支付接口
public interface IPay {void pay();
}// ID支付
public class IdPay implements IPay {Overridepublic void pay() {System.out.println(ID支付...);}
}// paypay支付
public class PayPay implements IPay {Overridepublic void pay() {System.out.println(paypay支付...);}
}// 乐天支付
public class RakuTenPay implements IPay {Overridepublic void pay() {System.out.println(乐天pay支付...);}
}⏹后台的实际应用
EnumMap的key是枚举类通过EnumMap将枚举类与枚举类对应的支付接口进行聚合
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;
import java.util.EnumMap;Controller
RequestMapping(/test35)
public class Test35Controller {// 使用EnumMap对枚举类和枚举类对应的支付方式进行映射聚合private static final EnumMapPayEnum, IPay commandMap new EnumMapPayEnum, IPay(PayEnum.class){{put(PayEnum.ID_PAY, new IdPay());put(PayEnum.PAY_PAY, new PayPay());put(PayEnum.RAKUTEN_PAY, new RakuTenPay());}};GetMapping(/init)public ModelAndView init() {ModelAndView modelAndView new ModelAndView();modelAndView.setViewName(test35);return modelAndView;}PostMapping(/pay)public ResponseEntityVoid pay(RequestBody PayForm payForm) {System.out.println(payForm);// 判断支付方式是否存在if (!commandMap.containsKey(payForm.getPayMethod())) {System.out.println(支付方式不存在......);return ResponseEntity.noContent().build();}// 支付方式存在的话调用支付接口进行支付IPay payMethod commandMap.get(payForm.getPayMethod());payMethod.pay();return ResponseEntity.noContent().build();}
}⏹前台
!DOCTYPE html
html langen xmlns:thhttp://www.thymeleaf.org
headmeta charsetUTF-8titleTitle/title
/head
bodybutton idbtn发送请求/button
/body
script typetext/javascript th:src{/js/public/jquery-3.6.0.min.js}/script
script$(function() {bindEvent();});function bindEvent() {$(#btn).click(() {const jsonData {msg: 110120119,// 代表paypay支付payMethod: 2};$.ajax({url: /test35/pay,type: POST,data: JSON.stringify(jsonData),contentType: application/json;charsetutf-8,success: function (data, status, xhr) {console.log(data);}});});}
/script
/html⏹效果 二. 案例2
⏹定义一个接口
public interface RoleOperation {// 表示某个角色可以做哪些op操作String op();
}⏹定义一个枚举类实现接口
// 定義一個枚舉類實現接口
public enum RoleEnum implements RoleOperation {// 系统管理员(有A操作权限)ROLE_ROOT_ADMIN {Overridepublic String op() {return ROLE_ROOT_ADMIN: has AAA permission;}},// 订单管理员(有B操作权限)ROLE_ORDER_ADMIN {Overridepublic String op() {return ROLE_ORDER_ADMIN: has BBB permission;}},// 普通用户(有C操作权限)ROLE_NORMAL {Overridepublic String op() {return ROLE_NORMAL: has CCC permission;}};}⏹调用
// 角色的名称
String role ROLE_ROOT_ADMIN;// 将枚举类中所有的角色都放到List中
ListRoleEnum roleEnums Arrays.asList(RoleEnum.values());
// 判断List中是否有相应的角色
if (roleEnums.contains(role)) {// 如果有的话,就执行该角色所对应的方法RoleEnum roleEnum RoleEnum.valueOf(role);System.out.println(roleEnum.op());
} else {System.out.println(對應的角色不存在);
}三. 案例3
public enum MessageEnum {SUCCESS(1, 成功),FAIL(-1, 失败),TIME_OUT(-2, 网络超时),PARAM_ERROR(-3, 参数错误);private int code;private String message;MessageEnum(int code, String message) {this.code code;this.message message;}public int getCode() {return this.code;}public String getMessage() {return this.message;}// 根据code获取对应的value.如果没有对应的code,就返回一个nullpublic static MessageEnum getMessageEnum(int code) {return Arrays.stream(MessageEnum.values()).filter(x - x.code code).findFirst().orElse(null);}
}⏹调用
OptionalMessageEnum messageEnum Optional.ofNullable(MessageEnum.getMessageEnum(10));
if (messageEnum.isPresent()) {System.out.println(messageEnum.get().getMessage());
} else {System.out.println(對應的code不存在);
}四. 案例4 枚举类聚合封装消息
import java.util.HashMap;
import java.util.Map;public final class AngConst {// 用于枚举类实现的接口public interface IAngConst {}// 枚举类实现接口public enum AngAliPay implements IAngConst {LOG_001,LOG_002,LOG_003}public enum AngPayPay implements IAngConst {LOG_001,LOG_002,LOG_003}public enum AngIDPay implements IAngConst {LOG_001,LOG_002,LOG_003}// 枚举类实现接口的妙处在此处体现// 或者可以使用EnumMap来进行聚合public static MapIAngConst, String dataMap new HashMap(){{// 支付方式—AngAliPayput(AngAliPay.LOG_001, AngAliPay处理开始...);put(AngAliPay.LOG_002, AngAliPay处理被中断...);put(AngAliPay.LOG_003, AngAliPay处理结束...);// 支付方式—AngPayPayput(AngPayPay.LOG_001, AngPayPay处理开始...);put(AngPayPay.LOG_002, AngPayPay处理被中断...);put(AngPayPay.LOG_003, AngPayPay处理结束...);// 支付方式—AngIDPayput(AngIDPay.LOG_001, AngIDPay处理开始...);put(AngIDPay.LOG_002, AngIDPay处理被中断...);put(AngIDPay.LOG_003, AngIDPay处理结束...);}};
}