add a jersey MessageBodyWriter that serializes scala lists to JSON arrays

This commit is contained in:
Eckart Hertzler 2009-12-14 17:57:47 +01:00
parent 6c4d05bbdc
commit e58128fccf
2 changed files with 39 additions and 0 deletions

View file

@ -0,0 +1 @@
se.scalablesolutions.akka.rest.ListWriter

View file

@ -0,0 +1,38 @@
/**
* Copyright (C) 2009 Scalable Solutions.
*/
package se.scalablesolutions.akka.rest
import java.io.OutputStream
import se.scalablesolutions.akka.serialization.Serializer
import javax.ws.rs.core.{MultivaluedMap, MediaType}
import javax.ws.rs.ext.{MessageBodyWriter, Provider}
import javax.ws.rs.Produces
/**
* writes Lists of JSON serializable objects
*/
@Provider
@Produces(Array("application/json"))
class ListWriter extends MessageBodyWriter[List[_]] {
def isWriteable(aClass: Class[_], aType: java.lang.reflect.Type, annotations: Array[java.lang.annotation.Annotation], mediaType: MediaType) = {
classOf[List[_]].isAssignableFrom(aClass) || aClass == ::.getClass
}
def getSize(list: List[_], aClass: Class[_], aType: java.lang.reflect.Type, annotations: Array[java.lang.annotation.Annotation], mediaType: MediaType) = -1L
def writeTo(list: List[_],
aClass: Class[_],
aType: java.lang.reflect.Type,
annotations: Array[java.lang.annotation.Annotation],
mediaType: MediaType,
stringObjectMultivaluedMap: MultivaluedMap[String, Object],
outputStream: OutputStream) : Unit = {
if (list.isEmpty)
outputStream.write(" ".getBytes)
else
outputStream.write(Serializer.ScalaJSON.out(list))
}
}