我有一个函数将map值(String)作为通用Object返回。如何将其转换回字符串。我试过toString()但我得到的只是end[Ljava.lang.String;@ff2413
public Object getParameterValue(String key)
{
Iterator iterator=params.entrySet().iterator();
while(iterator.hasNext())
{
Map.Entry me=(Map.Entry)iterator.next();
String[] arr=(String[])me.getValue();
log.info(me.getKey().toString()+"="+arr[0]);
}
if(params.containsKey(key))
{
log.info(key+"="+params.get(key));
return params.get(key);
}
return null;
}
接收结束
String temp=data.getParameterValue("request").toString();
log.info("end"+temp);
log.info(me.getKey().toString()+"="+arr[0]);
给我一个输出
email=x@as.com request=login projectid=as
答案 0 :(得分:47)
我担心你的地图中包含String
个对象以外的内容。如果在String对象上调用toString()
,则会获得字符串本身。
你得到的[Ljava.lang.String
表示你可能有一个String数组。
答案 1 :(得分:14)
可能与上述问题无关。但是,如果您正在寻找一种将Java对象序列化为字符串的方法,那么可以随手使用
package pt.iol.security;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.zip.GZIPInputStream;
import java.util.zip.GZIPOutputStream;
import org.apache.commons.codec.binary.Base64;
public class ObjectUtil {
static final Base64 base64 = new Base64();
public static String serializeObjectToString(Object object) throws IOException {
try (
ByteArrayOutputStream arrayOutputStream = new ByteArrayOutputStream();
GZIPOutputStream gzipOutputStream = new GZIPOutputStream(arrayOutputStream);
ObjectOutputStream objectOutputStream = new ObjectOutputStream(gzipOutputStream);) {
objectOutputStream.writeObject(object);
objectOutputStream.flush();
return new String(base64.encode(arrayOutputStream.toByteArray()));
}
}
public static Object deserializeObjectFromString(String objectString) throws IOException, ClassNotFoundException {
try (
ByteArrayInputStream arrayInputStream = new ByteArrayInputStream(base64.decode(objectString));
GZIPInputStream gzipInputStream = new GZIPInputStream(arrayInputStream);
ObjectInputStream objectInputStream = new ObjectInputStream(gzipInputStream)) {
return objectInputStream.readObject();
}
}
}
答案 2 :(得分:4)
查看输出,看来你的“temp”是一个String数组。您需要遍历数组以显示每个值。
答案 3 :(得分:4)
结果不是String
而是String[]
。这就是为什么你得到这个意想不到的打印输出。
[Ljava.lang.String
是String
数组的签名:
System.out.println(new String[]{});
答案 4 :(得分:4)
也许您可以将其转换为JSON字符串
table
在我的情况下,我想在响应标题中添加一个对象,但是你不能在标题中添加对象,
所以为了解决这个问题,我将我的对象转换为JSON字符串,在客户端,我将该字符串再次返回给JSON
答案 5 :(得分:3)
解决方案1:施放
String temp=(String)data.getParameterValue("request");
解决方案2:使用键入的地图:
Map<String, String> param;
所以你改变改变你的函数的返回类型
public String getParameterValue(String key)
{
if(params.containsKey(key))
{
return params.get(key);
}
return null;
}
然后不需要强制转换或toString
String temp=data.getParameterValue("request");
答案 6 :(得分:3)
问题如何将对象转换为String
,尽管您在此处看到了几个答案,并且尽管存在Object.toString
方法,但是无法回答,或者有无数的答案。因为要求的是某种文本表示或对象的描述,并且存在无限多种可能的表示。每个表示使用特殊目的语言(可能是一种非常有限的语言)或足以表达所有可能对象实例的表达格式对特定对象实例进行编码。
在编写代码以将对象转换为String
之前,您必须决定要使用的语言/格式。
答案 7 :(得分:2)
将serialize对象转换为String并将String转换为Object
stringToBean(beanToString(new LoginMdp()), LoginMdp.class);
public static String beanToString(Object object) throws IOException {
ObjectMapper objectMapper = new ObjectMapper();
StringWriter stringEmp = new StringWriter();
objectMapper.configure(SerializationFeature.INDENT_OUTPUT, true);
objectMapper.writeValue(stringEmp, object);
return stringEmp.toString();
}
public static <T> T stringToBean(String content, Class<T> valueType) throws IOException {
return new ObjectMapper().readValue(content, valueType);
}
答案 8 :(得分:0)
toString()是一个调试信息字符串。默认实现返回类名和系统标识哈希。集合返回所有元素,但不返回数组。
另请注意NullPointerException
创建日志!
在这种情况下,Arrays.toString()
可能有所帮助:
Object temp = data.getParameterValue("request");
String log = temp == null ? "null" : (temp.getClass().isArray() ? Arrays.toString((Object[])temp) : temp.toString());
log.info("end " + temp);
您还可以使用Arrays.asList()
:
Object temp = data.getParameterValue("request");
Object log = temp == null ? null : (temp.getClass().isArray() ? Arrays.asList((Object[])temp) : temp);
log.info("end " + temp);
这可能会导致原始数组ClassCastException
(int[]
,...)。
答案 9 :(得分:0)
/** * This toString-Method works for every Class, where you want to display all the fields and its values */ public String toString() {
StringBuffer sb = new StringBuffer();
Field[] fields = getClass().getDeclaredFields(); //Get all fields incl. private ones
for (Field field : fields){
try {
field.setAccessible(true);
String key=field.getName();
String value;
try{
value = (String) field.get(this);
} catch (ClassCastException e){
value="";
}
sb.append(key).append(": ").append(value).append("\n");
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
return sb.toString(); }
答案 10 :(得分:0)
您可以创建toString()方法将对象转换为字符串。
int bid;
String bname;
double bprice;
Book(String str)
{
String[] s1 = str.split("-");
bid = Integer.parseInt(s1[0]);
bname = s1[1];
bprice = Double.parseDouble(s1[2]);
}
public String toString()
{
return bid+"-"+bname+"-"+bprice;
}
public static void main(String[] s)
{
Book b1 = new Book("12-JAVA-200.50");
System.out.println(b1);
}