Если вы хотите обернуть тело исходного ответа текстом «CallBack (...)», то вы можете сделать это с Джерси, используя ContainerResponseFilter - см. Документацию javadoc, чтобы узнать больше о фильтрах контейнера: *
В этом конкретном случае вы можете определить фильтр следующим образом:
import com.sun.jersey.core.util.ReaderWriter;
import com.sun.jersey.spi.container.ContainerRequest;
import com.sun.jersey.spi.container.ContainerResponse;
import com.sun.jersey.spi.container.ContainerResponseFilter;
import com.sun.jersey.spi.container.ContainerResponseWriter;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import javax.ws.rs.core.HttpHeaders;
import javax.ws.rs.core.MediaType;
public class MyFilter implements ContainerResponseFilter {
private static class Wrapper implements ContainerResponseWriter {
private final ContainerResponseWriter crw;
private long contentLength;
private ContainerResponse response;
private ByteArrayOutputStream baos;
Wrapper (ContainerResponseWriter crw) {
this.crw = crw;
}
@Override
public OutputStream writeStatusAndHeaders(long contentLength, ContainerResponse response) throws IOException {
this.contentLength = contentLength;
this.response = response;
return this.baos = new ByteArrayOutputStream();
}
@Override
public void finish() throws IOException {
byte[] entity = baos.toByteArray();
// response.getHttpHeaders().putSingle(HttpHeaders.CONTENT_TYPE, "desired_new_content_type");
OutputStream out = crw.writeStatusAndHeaders(contentLength, response);
ReaderWriter.writeToAsString("CallBack(", out, response.getMediaType());
out.write(entity);
ReaderWriter.writeToAsString(")", out, response.getMediaType());
crw.finish();
}
}
@Override
public ContainerResponse filter(ContainerRequest request, ContainerResponse response) {
if (MediaType.APPLICATION_JSON_TYPE.isCompatible(response.getMediaType())) {
response.setContainerResponseWriter(
new Wrapper(response.getContainerResponseWriter()));
}
return response;
}
}
Кстати, вы можете использовать другой тип носителя, чтобы указать, что вы хотите, чтобы было выполнено обтекание, и в фильтре измените его на application / json, чтобы последующая обработка происходила правильно. В фильтре ответов вы можете изменить его обратно на то, что было при переносе результата (см. Закомментированную строку выше).