2011-05-19 29 views
28

Tengo una función que devuelve el valor del mapa (Cadena) como un Objeto genérico. ¿Cómo lo convierto de nuevo a cadena? Probé toString(), pero todo lo que consigo es end[Ljava.lang.String;@ff2413cómo convertir el objeto a cadena en java

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; 
} 

extremo receptor

String temp=data.getParameterValue("request").toString(); 
log.info("end"+temp); 

log.info(me.getKey().toString()+"="+arr[0]); dame una salida

 
[email protected] 
request=login 
projectid=as 
+0

Eliminé la solución de su pregunta. Si desea publicar eso como * respuesta *, siéntase libre. –

Respuesta

46

me temo que su mapa contiene algo distinto de String objetos. Si llama al toString() en un objeto String, obtendrá la cadena en sí.

Lo que obtienes [Ljava.lang.String indica que es posible que tengas una matriz de Cadenas.

+3

+1: faster'n me :-) – cadrian

+2

me ganó solo por 20 segundos ........ +1 –

+0

Edité mi parte de pregunta para mostrar lo que obtengo cuando recorro mi mapa – abi1964

4

Al mirar la salida, parece que su "temperatura" es una matriz de Cadenas. Debe recorrer el conjunto para mostrar cada valor.

4

El resultado no es un String sino un String[]. Es por eso que obtienes esta impresión insospechada.

[Ljava.lang.String es una firma de una serie de String:

System.out.println(new String[]{}); 
+0

Gracias Andreas_D – abi1964

3

Solución 1: Mon

String temp=(String)data.getParameterValue("request"); 

Solución 2: Uso mapa mecanografiado:

Map<String, String> param; 

Por lo que cambiar Cambiar el tipo de devolución de y nuestra función

public String getParameterValue(String key) 
{ 
    if(params.containsKey(key)) 
    { 
     return params.get(key); 
    } 
    return null; 
} 

y entonces no hay necesidad de yeso o toString

+0

La fundición no funciona todo el tiempo, por ejemplo' Int' y ' Long' ... – WoLfPwNeR

0

toString() es una cadena de información de depuración. La implementación predeterminada devuelve el nombre de clase y el hash de identidad del sistema. Las colecciones devuelven todos los elementos pero las matrices no.

También tenga en cuenta NullPointerException creando el registro!

En este caso, un Arrays.toString() pueden ayudar:

Object temp = data.getParameterValue("request"); 
String log = temp == null ? "null" : (temp.getClass().isArray() ? Arrays.toString((Object[])temp) : temp.toString()); 
log.info("end " + temp); 

También puede utilizar Arrays.asList():

Object temp = data.getParameterValue("request"); 
Object log = temp == null ? null : (temp.getClass().isArray() ? Arrays.asList((Object[])temp) : temp); 
log.info("end " + temp); 

Esto puede resultar en una ClassCastException para las matrices primitivas (int[], ...).

11

Puede que no esté tan relacionado con el problema anterior.Sin embargo, si usted está buscando una manera de serializar objetos Java como cadena, esto podría venir de la mano

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(); 
     } 
    } 
} 
+0

Esto es una pieza increíble de código, y resolvió mi problema perfectamente. Gracias una tonelada. –

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(); } 
2

La pregunta cómo puedo convertir un objeto a un String, a pesar de las varias respuestas que se ven aquí, ya pesar de la existencia del método Object.toString, no se puede responder o tiene infinitas respuestas. Porque lo que se solicita es algún tipo de representación de texto o descripción del objeto, y hay infinitas posibles representaciones. Cada representación codifica una instancia de objeto particular utilizando un lenguaje de propósito especial (probablemente un lenguaje muy limitado) o un formato lo suficientemente expresivo como para codificar todas las instancias de objetos posibles.

Antes de que se pueda escribir el código para convertir un objeto a String, debe decidir el idioma/formato que se utilizará.

1

Convertir objeto serialización de cadena y la cadena con el método() para convertir objeto a objeto 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); 
} 
0

Puede crear 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); 
} 
0

tal vez se benefician de convertirlo a JSON cadena

String jsonString = new com.google.gson.Gson().toJson(myObject); 

en mi caso, quería añadir un objeto a las cabeceras de respuesta, pero usted no puede agregar objetos a los colectores,

entonces para resolver esto, convierto mi objeto a cadena JSON y en el lado del cliente devolveré esa cadena a JSON nuevamente

Cuestiones relacionadas