MULTIPART_FORM_DATA: No injection source found for a parameter of type public javax.ws.rs.core.Response

后端 未结 8 1502
难免孤独
难免孤独 2020-11-22 08:52

I am using Jersey based restful Service implementation strategy to build a service which will be used to upload files. My service class name is : UploadFileService.java (See

相关标签:
8条回答
  • 2020-11-22 09:35

    I had this same problem with Scala and this helped me solve it. Just want to add some Scala specific details to help anyone using Dropwizard with Scala. Here is an example of how to "register" the MultiPartFeature in a Scala and Dropwizard project.

    package org.research.s3.service
    
    import io.dropwizard.Application
    import io.dropwizard.setup.Environment
    import org.research.s3.service.resource._
    import org.research.service.s3.resource.UploadResource
    
    import org.glassfish.jersey.media.multipart.{FormDataParam,MultiPartFeature}
    
    
    class CmdaaApp() extends Application[CmdaaAppConfig] {
    
    
    
      override def run(t: CmdaaAppConfig, env: Environment): Unit = {   
    
        env.jersey().register(new RootResource)
    
        //Need this to make the file upload code work in
        env.jersey().register(new MultiPartFeature)
        env.jersey().register(new UploadResource(curBucket))
    
    
      }
    
    
    }
    
    object CmdaaApp {
      def main(args: Array[String]): Unit = new CmdaaApp().run(args: _*)
    }
    

    and here is the code for the UploadResource that does the upload:

    package org.research.service.s3.resource
    
    import java.io.{FileInputStream, InputStream}
    
    
    import com.google.gson.{Gson, GsonBuilder}
    
    import javax.ws.rs.core.MediaType.APPLICATION_JSON
    import javax.ws.rs._
    import javax.ws.rs.core.Response
    import javax.ws.rs.core.MediaType
    import org.research.util.OptionSerializer
    import org.research.s3.service.resource.s3Bucket
    import org.glassfish.jersey.media.multipart.{FormDataParam,MultiPartFeature}
    
    
    
    
    
    @Path("/file")
    class UploadResource(currentBucket: s3Bucket) {
      val gsonb = new GsonBuilder()
      gsonb.registerTypeAdapter(classOf[Option[Any]], new OptionSerializer)
      val gson = gsonb.create
    
    
      @POST
      @Path("upload")
      @Produces(Array(APPLICATION_JSON))
      @Consumes(Array(MediaType.MULTIPART_FORM_DATA))
     // def uploadFile(): Response = {
      def uploadFile(@FormDataParam("file")  uploadedInputStream: InputStream): Response = {
    
        /* Need code here to get a uuid for the file name
           Then return the uuid if we have success and of course 200
         */
    
           Response.ok.entity(currentBucket.upload("testName",uploadedInputStream,false)).build()
        //Response.ok().build()
      }
    
    }
    

    This code refers to an s3 bucket but you don't need that. You can just replace that call with code do download your incoming file data to a regular file. scala

    0 讨论(0)
  • 2020-11-22 09:36

    Below code worked for me:

    Class ->>> add it

    Class Property --->> add it


    Public Class userREST () {

    @POST
        @Path("upload")
        @Consumes(MediaType.MULTIPART_FORM_DATA)
        @Produces(MediaType.APPLICATION_JSON)
        public Response uploadImageFile(@FormDataParam("uploadFile") InputStream fileInputStream,
                @FormDataParam("uploadFile") FormDataContentDisposition fileFormDataContentDisposition,
                @FormDataParam("FIR_REG_NUM") String FIR_REG_NUM, @FormDataParam("LOGIN_ID") String LOGIN_ID) {
    
            final_json_result = WriteFileInFolder.fileAnalysis(fileInputStream, fileFormDataContentDisposition, FIR_REG_NUM,
                    LOGIN_ID);
    
            return Response.ok(final_json_result).build();
    
        }// uploadImageFile
    

    Public Class FileJAXRSConfig () {

    package ####.jaxrs.jwt;
    
    import java.util.HashMap;
    import java.util.HashSet;
    import java.util.Map;
    import java.util.Set;
    import javax.ws.rs.ApplicationPath;
    import javax.ws.rs.core.Application;
    
    import ####.helper.Common@@@;
    import ####.jaxrs.jwt.filters.JWTRequestFilter;
    import ####.jaxrs.jwt.filters.JWTResponseFilter;
    import ####.service.FileServicesREST;
    
    
    
    @ApplicationPath("fileservice")
    public class FileJAXRSConfig extends Application {
    
        @Override
        public Set<Class<?>> getClasses() {
    
            Common@@@.logging("@ApplicationPath@FileServicesREST...");
            Set<Class<?>> clazzes = new HashSet<Class<?>>();
            clazzes.add(JWTRequestFilter.class);
            clazzes.add(FileServicesREST.class);
            clazzes.add(JWTResponseFilter.class);
    
            return clazzes;
        }
    
    
        @Override
        public Map<String, Object> getProperties() {
            Map<String, Object> properties = new HashMap<String, Object>();
            properties.put("jersey.config.server.provider.packages", "####.service");
            properties.put("jersey.config.server.provider.classnames", "org.glassfish.jersey.media.multipart.MultiPartFeature");
            return properties;
        }
    
    }
    

    Don't need to add following in web.xml

    <init-param>
                <param-name>jersey.config.server.provider.packages</param-name>
                <param-value>mha.@@@.service</param-value>
            </init-param>
            <init-param>
                <param-name>jersey.config.server.provider.classnames</param-name>
                <param-value>org.glassfish.jersey.media.multipart.MultiPartFeature</param-value>
            </init-param>
    
    0 讨论(0)
提交回复
热议问题