2012-04-15 14 views
7

que tiene este servicio con RESTeasy:imagen en bruto en RESTeasy

@GET 
@Path("/{name}") 
@Produces("image/jpeg") 
public BufferedImage get(@PathParam("name") String name) { 

    Monitor m = Monitor.getMonitor(name); 

    if (m == null) { 
     return null; 
    } 

    return m.getImage(); 
} 

entonces consigo después de la solicitud

Could not find MessageBodyWriter for response object of type: java.awt.image.BufferedImage of media type: image/jpeg 

¿Hay alguna "forma directa" para obtener la imagen en la respuesta?


Gracias a @Robert por instrucciones. Aquí código de trabajo:

@GET 
@Path("/{name}") 
@Produces("image/jpeg") 
public byte[] get(@PathParam("name") String name) { 

    Monitor m = Monitor.getMonitor(name); 

    if (m == null) { 
     return null; 
    } 

    ByteArrayOutputStream bo = new ByteArrayOutputStream(2048); 
    try { 
     ImageIO.write(m.getImage(),"jpeg",bo); 
    } catch (IOException ex) { 
     return null; 
    } 

    return bo.toByteArray(); 
} 

Respuesta

8

Usted debe tratar de

  • codificar la BufferedImage como JPG. Echar un vistazo a la clase javax.imageio.ImageIO
  • declarar su método para devolver un byte[]
  • asegurarse de que su aplicación siempre se ejecutará en un servidor que no comenzó con java.awt.headless=true (es decir, sin subsistema gráfico)

Por favor, deje nosotros sabemos si eso funciona, porque no tengo idea de si lo hará y no puedo intentarlo ahora mismo.

+0

No shure por el comentario acerca sin cabeza, he corrido con decapitado = true y funciona como se esperaba. – PeterMmm

+0

Bueno, suponía que las clases 'Monitor' y' ImageIO' no funcionarían en modo sin cabeza. Si lo hacen, ¡genial! –

+0

@Produces ("image/jpeg") me faltaba este, en su lugar usé @Produces (MediaType.WILDCARD) – Sagar

Cuestiones relacionadas