2013-06-29 3 views
10

J'applique le service web de repos en utilisant Jersey. J'ai besoin d'avoir l'objet de ServletContext pour enregistrer le fichier dans le répertoire de l'application. Aidez-moi s'il vous plaît à comprendre le contexte. J'appelle ce webservice de l'appareil Android.Comment obtenir le ServletContext dans le service Web Rest

Merci d'avance.

@Path("notice") 
public class NoticeResources { 

    @Resource 
    private ServletContext context; 


    @POST 
    @Path("uploadphoto") 
    @Consumes(MediaType.MULTIPART_FORM_DATA) 
    @Produces("text/plain") 
    public String uploadNotices(@FormDataParam("file") InputStream uploadedInputStream) { 

     File photoDirectory = new File("\\photo"); 

     // if the directory does not exist, create it 
     if (!photoDirectory.exists()) { 
      boolean result = photoDirectory.mkdir(); 
      if(result){ 
       System.out.println("DIR created"); 
      } 
     } 

     String rootPath = photoDirectory.getAbsolutePath(); 

     String uploadedFileLocation = rootPath + "\\photo.jpg"; 
     // save it 
     try { 
      writeToFile(uploadedInputStream, uploadedFileLocation); 
     } catch(Exception e) { 
      return "no" + rootPath; 
     } 
     return "yes" + rootPath; 
    } 

    // save uploaded file to new location 
    private void writeToFile(InputStream uploadedInputStream, String uploadedFileLocation) throws Exception { 
     OutputStream out = new FileOutputStream(new File(uploadedFileLocation)); 
     int read = 0; 
     byte[] bytes = new byte[1024]; 

     out = new FileOutputStream(new File(uploadedFileLocation)); 
     while ((read = uploadedInputStream.read(bytes)) != -1) { 
      out.write(bytes, 0, read); 
     } 
     out.flush(); 
     out.close(); 
    } 
} 

Répondre

28

Utilisez @Context, voici Jersey documentation

@Context 
private ServletContext context; 

MISE À JOUR - vous pouvez également injecter directement dans les méthodes si on le souhaite

public String uploadNotices(@Context ServletContext context, ...) 
+0

+1 Je crois qu'il peut aussi être injecté dans des méthodes comme paramètres (au moins dans RESTEasy cela est possible, Jersey devrait être le même). – acdcjunior

+0

Vous avez raison, je ne l'ai pas inclus car il n'a pas été demandé explicitement dans la question OP - mais je vais l'inclure. – ikumen

+0

+1. Nice .. c'est utile. –

3

utiliser la @context d'annotation (injection de niveau de la méthode)

public Response getContext(@Context HttpServletRequest req, @Context HttpServletResponse res)throws Exception 
{ 
    System.out.println("Context Path is:"+req.getRequestURL().toString()); 
    result=req.getRequestURL().toString(); 
    return Response.status(200).entity(result).build(); 
} 
Questions connexes