Java小程序之BeanToMap

本文介绍了如何使用Java的反射技术将一个实例化的JavaBean转换成Map。通过展示Student类和beanToMap方法的实现,解释了在转换过程中遇到的问题,如避免将class信息放入Map,以及解决方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

BeanToMap?

看到这个标题,大家应该都能想到是把一个实例化的JavaBean的各个属性(Key)和属性值(Value),存到Map中去。没错,接下来要做的就是这件事。

BeanToMap难度也不是特别大,运用的Java技术是反射。
先瞧下所用的JavaBean—Student.class
在这里插入图片描述
再看MyUtility.java中的beanToMap方法
在这里插入图片描述
最后我们来看看运行效果

### 集成微信小程序支付至 Spring Boot 项目 #### 准备工作 为了使微信支付功能正常运作,在微信支付平台上需完成 APPID 的绑定操作[^1]。 #### 构建 Spring Boot 应用程序结构 创建一个新的 Spring Boot 工程并引入必要的依赖项,包括但不限于 `spring-boot-starter-web` 和用于 HTTP 请求处理的库。对于后者,可以利用 `RestTemplate` 来简化网络请求过程: ```java @Configuration public class AppConfig { @Bean public RestTemplate restTemplate() { return new RestTemplate(); } } ``` 此段代码展示了如何通过定义一个名为 `AppConfig` 的配置类来实例化 `RestTemplate` 对象,这有助于后续向微信服务器发送请求时使用[^2]。 #### 微信支付接口调用流程 当涉及到具体实现微信支付的功能时,开发者应遵循官方文档中的指引,特别是关于 code2Session API 的说明,该API允许应用根据前端传来的临时登录凭证获取用户的 session_key 及其他基本信息[^3]。 #### 处理支付逻辑 在应用程序内部设置好相应的控制器和服务层之后,就可以着手编写具体的业务逻辑了。下面是一个简单的例子展示怎样发起预支付订单请求以及解析返回的数据包: ```java @Service public class WeChatPayService { private static final String UNIFIED_ORDER_URL = "https://api.mch.weixin.qq.com/pay/unifiedorder"; // ... other fields and methods ... /** * 发起统一下单请求. */ public Map<String, Object> createOrder(String openId, BigDecimal amount) throws Exception { SortedMap<Object, Object> params = new TreeMap<>(); params.put("appid", appId); params.put("mch_id", mchId); params.put("nonce_str", WXPayUtil.generateNonceStr()); params.put("body", "Test Product"); params.put("out_trade_no", generateOutTradeNo()); // 自己生成商户订单号的方法 params.put("total_fee", (int)(amount.multiply(new BigDecimal(100)).doubleValue())); params.put("spbill_create_ip", getLocalIp()); params.put("notify_url", notifyUrl); // 支付成功后的回调地址 params.put("trade_type", "JSAPI"); // 小程序固定为 JSAPI params.put("openid", openId); String sign = WXPayUtil.generateSignature(params, key); params.put("sign", sign); String xmlData = WXPayUtil.mapToXml(params); HttpEntity<String> requestEntity = new HttpEntity<>(xmlData, null); ResponseEntity<String> responseEntity = restTemplate.postForEntity(UNIFIED_ORDER_URL, requestEntity ,String.class ); if(responseEntity.getStatusCode().is2xxSuccessful()){ String resultXML = responseEntity.getBody(); Map<String,Object> resultMap = WXPayUtil.xmlToMap(resultXML); if ("SUCCESS".equals(resultMap.get("return_code")) && "SUCCESS".equals(resultMap.get("result_code"))) { // 解析prepay_id 并封装成客户端所需的参数 String prepayId = (String) resultMap.get("prepay_id"); Map<String, Object> payParams = new HashMap<>(); long timestamp = System.currentTimeMillis()/1000; String nonceStr = WXPayUtil.generateNonceStr(); payParams.put("appId", appId); payParams.put("timeStamp", "" + timestamp); payParams.put("nonceStr", nonceStr ); payParams.put("package", "prepay_id=" + prepayId); payParams.put("signType", "MD5"); String paySign = WXPayUtil.generateSignature(payParams, key); payParams.put("paySign", paySign); return payParams; }else{ throw new RuntimeException("Unified order failed."); } } else { throw new RuntimeException("Failed to connect wechat server."); } } } ``` 上述服务方法接收来自前端的小程序用户标识符 (`openId`) 和交易金额作为输入参数,并执行一系列步骤以准备并向微信提交统一订单请求。一旦获得成功的响应,则进一步提取出必需的信息以便于构建最终传递给小程序端的签名数据集。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值