The following workaround is working for me for all non-domain objects. I am using Jackson for serializing the objects to JSON. This fixes the 'single-element-array' problem:
1. Add Jackson as dependency to your BuilddConfig.groovy
2. Create a class JsonMessageBodyWriter.groovy in grails-app/providers
import com.fasterxml.jackson.databind.ObjectMapper
import javax.ws.rs.Produces
import javax.ws.rs.ext.Provider
import static org.grails.jaxrs.support.ConverterUtils.*
import static org.grails.jaxrs.support.ProviderUtils.*
import grails.converters.JSON
import grails.converters.XML
import java.lang.annotation.Annotation
import java.lang.reflect.ParameterizedType
import java.lang.reflect.Type
import javax.ws.rs.WebApplicationException
import javax.ws.rs.core.MediaType
import javax.ws.rs.core.MultivaluedMap
import javax.ws.rs.ext.MessageBodyWriter
@Provider
@Produces("application/json")
class JsonMessageBodyWriter implements MessageBodyWriter {
@Override
boolean isWriteable(Class<?> type, Type genericType, Annotation[] annotations, MediaType mediaType) {
return true
}
@Override
long getSize(Object t, Class<?> type, Type genericType, Annotation[] annotations, MediaType mediaType) {
return -1
}
@Override
void writeTo(Object t, Class<?> type, Type genericType, Annotation[] annotations, MediaType mediaType, MultivaluedMap<String, Object> httpHeaders, OutputStream entityStream) throws IOException, WebApplicationException {
new ObjectMapper().writeValue(entityStream, t);
}
}