#java
#java
Вопрос:
У меня есть функция, которая возвращает значение карты (String) как универсальный объект. Как мне преобразовать его обратно в строку. Я попробовал 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 запрос =логин projectid=как
Комментарии:
1. Я удалил ваше решение из вашего вопроса. Если вы хотите опубликовать это в качестве ответа , не стесняйтесь.
Ответ №1:
Я боюсь, что ваша карта содержит что-то другое, чем String
объекты. Если вы вызываете toString()
строковый объект, вы получаете саму строку.
То, что вы получаете, [Ljava.lang.String
указывает на то, что у вас может быть массив строк.
Комментарии:
1. Я отредактировал часть своего вопроса, чтобы показать, что я получаю, когда я перебираю свою карту
2. И в чем теперь ваш вопрос?
3. Спасибо, Вивьен, ты была первой, кто уведомил, что
[Ljava.lang.String
указывает на массив строк, спасибо всем за помощь 🙂
Ответ №2:
Возможно, это не так связано с проблемой выше. Однако, если вы ищете способ сериализовать объект 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();
}
}
}
Комментарии:
1. Это удивительный фрагмент кода, и он отлично решил мою проблему. Огромное спасибо.
Ответ №3:
возможно, вам выгодно преобразовать его в строку JSON
String jsonString = new com.google.gson.Gson().toJson(myObject);
в моем случае я хотел добавить объект в заголовки ответа, но вы не можете добавлять объекты в заголовки,
итак, чтобы решить эту проблему, я преобразую свой объект в строку JSON, и на стороне клиента я снова верну эту строку в JSON
Ответ №4:
Глядя на выходные данные, кажется, что ваш «temp» представляет собой массив строк. Вам нужно выполнить цикл по массиву, чтобы отобразить каждое значение.
Ответ №5:
Результатом является не a String
, а String[]
. Вот почему вы получаете эту неожиданную распечатку.
[Ljava.lang.String
является сигнатурой массива String
:
System.out.println(new String[]{});
Ответ №6:
Вопрос, как мне преобразовать объект в String
, несмотря на несколько ответов, которые вы видите здесь, и несмотря на существование Object.toString
метода, не имеет ответа или имеет бесконечно много ответов. Потому что запрашивается некое текстовое представление или описание объекта, а возможных представлений бесконечно много. Каждое представление кодирует конкретный экземпляр объекта, используя язык специального назначения (возможно, очень ограниченный язык) или формат, который достаточно выразителен для кодирования всех возможных экземпляров объекта.
Прежде чем можно будет написать код для преобразования объекта в String
, необходимо определиться с языком / форматом, который будет использоваться.
Ответ №7:
Чтобы преобразовать сериализованный объект в строку и строку в объект
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:
Решение 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");
Ответ №9:
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[]
, …).
Ответ №10:
/** * 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(); }
Ответ №11:
Вы можете создать метод 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);
}