public String encodeGet(String str){ if(str!=null){ try { str = new String(str.getBytes("iso8859-1"),"utf-8"); } catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block e.printStackTrace(); } } return str; } public String getRequestEncode(String key){ String str = request.getParameter(key); return encodeGet(str); } public Object getByRequest(Object model){ //Object model = c.getInterfaces(); Class c = model.getClass(); Map<String,String> map = new HashMap(); Map<String,String[]> parammap = request.getParameterMap(); for(Map.Entry<String, String[]> entry:parammap.entrySet()){ String[] value = entry.getValue(); if(value.length==1){ map.put(entry.getKey(),value[0]); } } Field[] fields = c.getDeclaredFields(); try { for(int i=0;i<fields.length;i++){ Field field = fields[i]; field.setAccessible(true); String fname = field.getName(); String mvalue = map.get(fname); if(mvalue != null && !mvalue.equals("") && !mvalue.equals("null")){ String ftype = field.getType().getSimpleName(); if(ftype.equals("String")){ field.set(model, mvalue); }else if(ftype.equals("Integer") || ftype.equals("int")){ field.set(model, Integer.parseInt(mvalue)); }else if(ftype.equals("Double")){ field.set(model, Double.parseDouble(mvalue)); }else if(ftype.equals("Timestamp")){ Timestamp timestamp = Timestamp.valueOf(mvalue); field.set(model,timestamp); } } } }catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } return model; }
时间: 2024-01-05 13:04:45 浏览: 123
这是一段 Java 代码,主要是对 HTTP 请求中的参数进行编码,并将其赋值给一个 Java 对象。具体来说,它包括三个方法:
- encodeGet(String str):对传入的字符串进行 ISO8859-1 到 UTF-8 的编码转换,并返回转换后的字符串。
- getRequestEncode(String key):从 HTTP 请求中获取 key 对应的参数,并对参数进行编码转换。
- getByRequest(Object model):将 HTTP 请求中的参数转换成 Java 对象。它首先通过反射获取对象的所有字段,然后遍历所有参数,将参数的值赋给对应字段。在赋值之前,它会根据字段的类型进行类型转换。支持的类型包括 String、Integer、Double 和 Timestamp。
需要注意的是,这段代码存在一些问题。例如,它没有对参数的 key 进行空值判断,可能会导致空指针异常;它也没有处理参数值中包含特殊字符的情况,可能会引发安全问题。因此,在使用这段代码时需要进行改进。
相关问题
public void send(String str) { if(str.isEmpty())return; try { byte[] bytes; if (!isHex16Enabled) { bytes = str.getBytes(); Log.d(TAG,"send(org)="+ str); } else { bytes = StringUtils.hexStringToByteArray(str); Log.d(TAG, "send(16hex)="+new String(bytes,"UTF-8")); } if (outputStream != null) { if(isPreSuffixEnabled)outputStream.write(PREFIX); outputStream.write(bytes);//写入数据 if(isPreSuffixEnabled)outputStream.write(SUFFIX); outputStream.flush(); } } catch (IOException e) { e.printStackTrace(); } }
这段代码定义了一个发送数据的方法send,用于向蓝牙设备发送数据。首先对发送的字符串进行判空操作,如果为空则直接返回。然后根据是否启用了16进制发送模式,将字符串转换成字节数组。如果使用了16进制发送模式,则将字节数组转换成字符串进行日志输出。接着判断输出流不为空,如果不为空,则将数据写入输出流中,并在数据前后添加前缀和后缀(如果启用了前后缀模式)。最后刷新输出流。如果在写入数据时出现IO异常,则打印异常栈信息。这个方法可以在Android中用于向蓝牙设备发送数据。
public static String hmacsha256(String plainStr, String key) { SecretKeySpec secretKey = new SecretKeySpec(key.getBytes(Charset.forName("UTF-8")), "HmacSHA256"); Mac mac=null; try { mac = Mac.getInstance(secretKey.getAlgorithm()); mac.init(secretKey); } catch (NoSuchAlgorithmException | InvalidKeyException e) { e.printStackTrace(); } byte digest[] = mac.doFinal(plainStr.getBytes(Charset.forName("UTF- 8"))); return new StringBuilder().append(byte2HexStr(digest)).toString(); } public static String byte2HexStr(byte array[]) { return array != null ? new String(Hex.encodeHex(array)) : null; } 转为 PHP
以下是将Java代码转换为PHP代码的实现:
```php
function hmacsha256($plainStr, $key) {
$secretKey = new \SecretKeySpec(utf8_encode($key), "HmacSHA256");
$mac = null;
try {
$mac = \Mac::getInstance($secretKey->getAlgorithm());
$mac->init($secretKey);
} catch (\NoSuchAlgorithmException | \InvalidKeyException $e) {
echo $e->getMessage();
}
$digest = $mac->doFinal(utf8_encode($plainStr));
return byte2HexStr($digest);
}
function byte2HexStr($array) {
return $array != null ? bin2hex($array) : null;
}
```
注意,该PHP代码需要使用PHP 7.1或更高版本,因为它使用了PHP 7.1中的二进制字面量语法。另外,还需要确保已经加载了Hex编码器。
阅读全文