RESTful produces binary file

18,057

If it will return any file, you might want to make your method more "generic" and return a javax.ws.rs.core.Response which you can set the Content-Type header programmatically:

@Path("/download/")
@GET
public javax.ws.rs.core.Response getFile() throws Exception {
    if (/* want the pdf file */) {
        return Response.ok(new File(/*...*/)).type("application/pdf").build(); 
    }

    /* default to xml file */
    return Response.ok(new FileInputStream("custom.xml")).type("application/xml").build();
}
Share:
18,057
Marco Aviles
Author by

Marco Aviles

Java and Ruby developer. Always looking to learn more

Updated on July 19, 2022

Comments

  • Marco Aviles
    Marco Aviles almost 2 years

    I'm new using CXF and Spring to make RESTful webservices.

    This is my problem: I want to create a service that produces "any" kind of file(can be image,document,txt or even pdf), and also a XML. So far I got this code:

    @Path("/download/")
    @GET
    @Produces({"application/*"})
    public CustomXML getFile() throws Exception; 
    

    I don't know exactly where to begin so please be patient.

    EDIT:

    Complete code of Bryant Luk(thanks!)

    @Path("/download/")
    @GET
    public javax.ws.rs.core.Response getFile() throws Exception {
        if (/* want the pdf file */) {
            File file = new File("...");
            return Response.ok(file, MediaType.APPLICATION_OCTET_STREAM)
                .header("content-disposition", "attachment; filename =" + file.getName())
                .build(); 
        }
    
        /* default to xml file */
        return Response.ok(new FileInputStream("custom.xml")).type("application/xml").build();
    }