我正在尝试使用Jersey生产XSSFWorkbook。

我尝试了以下标头,但似乎没有任何效果:

@Produces(“ application / xml”)

@Produces(“ application / vnd.openxmlformats-officedocument.spreadsheetml.sheet”)

@Produces(“ application / vnd.openxml”

全部返回以下错误:


  引起原因:com.sun.jersey.api.MessageException:Java类org.apache.poi.xssf.usermodel.XSSFWorkbook和Java类型类org.apache.poi.xssf.usermodel.XSSFWorkbook和MIME的消息正文编写器找不到媒体类型application / xml
      ...更多37


本质上,我具有创建XSSFWorkbook的功能,我想将其写出来供用户下载。我可以做到:

 /*
    HttpServletResponse response;
    XssfWorkbook excel.write(response.getOutputStream());
    */
    @GET
    @Path("/excel/")
    @Produces("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")
    public XSSFWorkbook exportReadingsAsExcel(@Context HttpServletResponse webResponse)
    {
        XSSFWorkbook excel = createExcel();
        setHeader(webResponse, "export.xlsx");
    try {
        excel.write(webResponse.getOutputStream());
    } catch (IOException e) {
        e.printStackTrace();
    }
        return excel; //ERROR IS HERE
    }


但由于其他原因,我还需要该函数返回XSSFWorkbook。我希望不要使用网络响应,而让Jersey将其写出来。

谢谢您的帮助。

(我对Jersey和XSSF有点陌生,所以如果我对术语或理解不满意,请多多包涵)

最佳答案

您需要为XSSFWorkbook编写自定义作家(或找到一个作家),然后将其插入Jersey:

@Provider
@Produces("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")
public class CustomXSSFWorkbookWriter implements MessageBodyWriter {
    //This methode is the most important for you
    @Override
public void writeTo(Object target, Class type, Type genericType,
        Annotation[] annotations, MediaType mediaType,
        MultivaluedMap httpHeaders, OutputStream outputStream)
        throws IOException {


然后,您必须将此类的包添加到您的web.xml中,如下所示:

<servlet>
    <servlet-name>Jersey REST Service</servlet-name>
    <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
    <init-param>
        <param-name>com.sun.jersey.config.property.packages</param-name>
        <param-value>com.packages.to.your.views;com.packages.to.your.providers</param-value>
    </init-param>


泽西岛将由您自己的作家来制作这种特定格式。抱歉,我对XSSFWorkbook一无所知。

希望能解决您的问题。

07-26 05:17