params.add跟params.put的区别

从源码里看,最明显的一个区别,add方法可以给同一个key值传多个value,它会存在一个list里面;而put方法只能给同一个key传唯一一个value,如果传多个后一个会替换掉前一个。

当然,其实api里的描述也很清楚了。
void    add(java.lang.String key, java.lang.String value)
Adds string value to param which can have more than one value.
添加字符串给param,并且可以传不止一个。
-------------------------------
void    put(java.lang.String key, java.lang.String value)
Adds a key/value string pair to the request.
添加一个字符串键值对给request。
将以下JAVA代码转为PHP代码:import java.security.spec.*; import java.security.*; import java.util.*; import org.apache.commons.lang3.StringUtils; public class SignUtils { public static String signSHA256(byte[] message, byte[] privateKeyBytes) throws Exception { PKCS8EncodedKeySpec priPKCS8 = new PKCS8EncodedKeySpec(Base64.getDecoder().decode(privateKeyBytes)); KeyFactory keyf = KeyFactory.getInstance("RSA"); PrivateKey privateKey = keyf.generatePrivate(priPKCS8); Signature sign = Signature.getInstance("SHA256withRSA"); sign.initSign(privateKey); sign.update(message); return Base64.getEncoder().encodeToString(sign.sign()); } public static String makeSignStr(Map<String, String> params) { List<String> keys = Lists.newArrayList(); for (Map.Entry<String, String> entry : params.entrySet()) { if ("sign".equals(entry.getKey())) { continue; } if (StringUtils.isNotBlank(entry.getValue())) { keys.add(entry.getKey()); } } Collections.sort(keys); List<String> temp = Lists.newArrayList(); for (String key : keys) { String value = params.get(key); temp.add(key + "=" + value); } return StringUtils.join(temp, "&"); } public static void main(String[] args) { try { //读取私钥 byte[] privateKeyBytes = null; Map<String, String> params = new HashMap<>(); params.put("mch_id", "商户编号"); params.put("app_id", "应用ID"); params.put("timestamp", "1541661668"); params.put("nonce_str", "aiz04enx0a2"); params.put("sign_type", "SHA"); params.put("version", "2.0"); params.put("content", "VBDExvz6/k56B1S5n7n3uOvI2sxZixcsV0Tdld92ym0CpnN8ooiCkXPgg0N1z8NC"); //签名 String sign = SignUtils.signSHA256(makeSignStr(params).getBytes("UTF-8"), privateKeyBytes); } catch (Exception e) { e.printStackTrace(); } } }
06-13
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值