MessageBodyWriter MyRESTEasy không nhận ra tùy chỉnh văn nội dung thư
@Provider
@Produces("text/csv")
public class CSVMessageBodyWriter implements MessageBodyWriter<JaxbList>
public static final String CONTENT_DISPOSITION_HEADER = "Content-Disposition";
//$NON-NLS-1$
private final static HeaderDelegate<ContentDispositionHeader> header = RuntimeDelegate.getInstance().createHeaderDelegate(ContentDispositionHeader.class);
public long getSize(JaxbList t, Class<?> type, Type genericType, Annotation[] annotations, MediaType mediaType) {
return -1;
}
public boolean isWriteable(Class<?> type, Type genericType, Annotation[] annotations, MediaType mediaType) {
return CsvSerializer.class.isAssignableFrom(type);
}
public void writeTo(JaxbList t, Class<?> type, Type genericType, Annotation[] annotations, MediaType mediaType, MultivaluedMap<String, Object> httpHeaders,
OutputStream entityStream) throws IOException, WebApplicationException {
// set content disposition. This will enable browsers to open excel
ContentDispositionHeader contentDispositionHeader = ContentDispositionHeader.createContentDispositionHeader(MediaTypeUtils.CSV_TYPE);
contentDispositionHeader.setFileName("representation"); //$NON-NLS-1$
httpHeaders.putSingle(CONTENT_DISPOSITION_HEADER, header.toString(contentDispositionHeader));
Charset charset = Charset.forName(ProviderUtils.getCharset(mediaType));
OutputStreamWriter writer = new OutputStreamWriter(entityStream, charset);
PrintWriter printWriter = new PrintWriter(writer);
Iterator<String[]> rows = ((CsvSerializer) t).getEntities();
while (rows.hasNext()) {
printWriter.println(CsvWriter.getCSVRow(rows.next()));
}
printWriter.flush();
}
}
My REST của Application
@Path("app/v3")
@GZIP
@Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML, "text/csv"})
public class ApplicationREST
Gia hạn Application
@ApplicationPath("/")
public class JaxRsActivator extends Application {
private Set<Object> singletons = new HashSet<Object>();
private Set<Class<?>> classes = new HashSet<Class<?>>();
public JaxRsActivator() {
singletons.add(new CSVMessageBodyWriter());
classes.add(ApplicationREST.class);
}
@Override
public Set<Object> getSingletons() {
Set<Object> defaults = super.getSingletons();
singletons.addAll(defaults);
return singletons;
}
public Set<Class<?>> getClasses() {
return classes;
}
}
Khi tôi chạy trong chế độ gỡ lỗi tôi có thể nhấn lớp JaxRsActivator của tôi, vì vậy tôi biết rằng các nhà cung cấp đang được tải. Tuy nhiên tôi nhận được lỗi "Không thể tìm thấy MessageBodyWriter cho đối tượng phản hồi của loại: net.comp.jaxb.JaxbList loại phương tiện: text/csv"
là 'classes.add (AppREST.class); 'một lỗi đánh máy? Hay bạn chỉ quên bằng cách nào đó làm cho ApplicationREST có sẵn? –
đó là lỗi đánh máy. Ứng dụng của nóREST –
@Cam Sonaris - Bạn có thể vui lòng đăng triển khai MessageBodyWriter của mình không? – gregwhitaker