如何在java中将对象转换为字符串
我有一个函数,它将映射值(字符串)作为泛型对象返回。如何将其转换回字符串。我尝试使用字符串()但得到的结果是如何在java中将对象转换为字符串,java,Java,我有一个函数,它将映射值(字符串)作为泛型对象返回。如何将其转换回字符串。我尝试使用字符串()但得到的结果是end[Ljava.lang.String;@ff2413 public Object getParameterValue(String key) { Iterator iterator=params.entrySet().iterator(); while(iterator.hasNext()) { Map.Entry me=(Map.Entry
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
电子邮件=x@as.com
请求=登录
projectd=as
恐怕您的映射包含的不是
String
对象。如果对字符串对象调用toString()
,您将获得字符串本身
您得到的
[Ljava.lang.String
表明您可能有一个字符串数组。查看输出,您的“temp”似乎是一个字符串数组。您需要在数组中循环以显示每个值。结果不是一个字符串,而是一个字符串[]
。这就是您获得此意外打印输出的原因
[Ljava.lang.String
是字符串数组的签名
:
System.out.println(new String[]{});
解决方案1:铸造
String temp=(String)data.getParameterValue("request");
解决方案2:使用类型化映射:
Map<String, String> param;
这样就不需要施放或投掷了
String temp=data.getParameterValue("request");
toString()是调试信息字符串。默认实现返回类名和系统标识哈希。集合返回所有元素,但不返回数组
还要注意NullPointerException
创建日志
在这种情况下,aArrays.toString()
可能有助于:
Object temp = data.getParameterValue("request");
String log = temp == null ? "null" : (temp.getClass().isArray() ? Arrays.toString((Object[])temp) : temp.toString());
log.info("end " + temp);
您还可以使用数组.asList()
:
这可能会导致基元数组(int[]
,…)出现ClassCastException
。可能与上述问题没有太大关系。但是,如果您正在寻找将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();
}
}
}
如何将一个对象转换为字符串
,而不管您在这里看到的几个答案,也不管对象的存在。toString
方法,这个问题是无法回答的,或者有无限多个答案。因为所要求的是对象的某种文本表示或描述,并且有无限多个答案许多可能的表示法。每个表示法使用一种特殊用途的语言(可能是一种非常有限的语言)或足以表达所有可能的对象实例的格式来编码一个特定的对象实例
在编写代码将对象转换为字符串之前,必须确定要使用的语言/格式。将序列化对象转换为字符串,将字符串转换为对象
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);
}
stringToBean(beanToString(new LoginMdp()),LoginMdp.class);
公共静态字符串beanToString(对象对象)引发IOException{
ObjectMapper ObjectMapper=新的ObjectMapper();
StringWriter stringEmp=新StringWriter();
configure(SerializationFeature.INDENT_输出,true);
writeValue(stringEmp,object);
返回stringEmp.toString();
}
公共静态T stringToBean(字符串内容,类值类型)引发IOException{
返回新的ObjectMapper().readValue(内容、值类型);
}
您可以创建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);
}
也许您可以从将其转换为JSON字符串中获益
String jsonString = new com.google.gson.Gson().toJson(myObject);
在我的例子中,我想向响应标题添加一个对象,但您不能向标题添加对象
因此,为了解决这个问题,我将我的对象转换为JSON字符串,在客户端,我将再次将该字符串返回到JSON我编辑了我的问题部分,以显示我在迭代地图时得到的结果,以及您现在的问题是什么?谢谢Vivien,您是第一个通知[Ljava.lang.String
表示一个字符串数组,感谢大家的帮助:)这是一段令人惊叹的代码,它完美地解决了我的问题。非常感谢。我从你的问题中删除了你的解决方案。如果你想将其作为答案发布,请随意。
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);
}
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);
}
String jsonString = new com.google.gson.Gson().toJson(myObject);