如何在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
创建日志

在这种情况下,a
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);
您还可以使用
数组.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);