2016-02-21 3 views
0

Я новичок в веб-сервисах. Я пытаюсь отправить InputStream из приложения android на сервер, использующий функцию Drivers 2.22, например Rest, но я получил ошибку 415 Unsupported media type. Это мой код клиента (я использую AsyncHttpClient из Loopj): код боковогоjersey неподдерживаемый mediatype с @FormDataParam

client.addHeader("Content-Type", "application/octet-stream"); 
    final RequestParams requestParams = new RequestParams(); 
    requestParams.put("file", myInputStream); 

    client.post("MyUrl", requestParams, new AsyncHttpResponseHandler() { 
        @Override 
        public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) { 
         System.out.println("Success"); 
        } 

        @Override 
        public void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable error) { 
         if(responseBody != null) 
          System.out.println(new String(responseBody, StandardCharsets.UTF_8)); 
         System.out.println(error.getMessage()); 
         System.out.println("Failure"); 
        } 
       }); 

Сервера:

@Path("/schedule") 
public class schedule { 

@POST 
@Secured 
@Consumes(MediaType.APPLICATION_OCTET_STREAM) 
public Response getScenario(@FormDataParam("file")InputStream payload){ 

    System.out.println("I'm in"); 
    //Do stuff with payload 
return Response.ok().build(); 
} 

Но если вместо @FormDataParam я только положить

public Response getScenario(InputStream payload) 

Я получаю мой входной поток без ошибки 415 (естественно, в этом случае inputStream также содержит httpBody).

Поиск в Интернете, я прочитал о проблемах с зависимостями, но все кажется нормально. Вот мой pom.xml и ресурсосбережение Конфигурация:

final ResourceConfig rc = new ResourceConfig().packages("MyPackages", "org.glassfish.jersey.examples.multipart"); 
rc.register(MultiPartFeature.class); 

pom.xml

<dependencyManagement> 
    <dependencies> 
     <dependency> 
      <groupId>org.glassfish.jersey</groupId> 
      <artifactId>jersey-bom</artifactId> 
      <version>${jersey.version}</version> 
      <type>pom</type> 
      <scope>import</scope> 
     </dependency> 
    </dependencies> 
</dependencyManagement> 

<dependencies> 
    <dependency> 
     <groupId>org.glassfish.jersey.containers</groupId> 
     <artifactId>jersey-container-grizzly2-http</artifactId> 
    </dependency> 
    <!-- uncomment this to get JSON support: --> 
    <dependency> 
     <groupId>org.glassfish.jersey.media</groupId> 
     <artifactId>jersey-media-json-jackson</artifactId> 
     <scope>runtime</scope> 
    </dependency> 
      <dependency> 
     <groupId>org.glassfish.jersey.media</groupId> 
     <artifactId>jersey-media-multipart</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.jvnet.mimepull</groupId> 
     <artifactId>mimepull</artifactId> 
     <version>1.9.6</version> 
    </dependency> 

<properties> 
    <jersey.version>2.22.1</jersey.version> 
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
</properties> 
+0

Я решил через минуту задавая вопрос. – Davide

ответ

0

Я решил просто изменив аннотацию @Consumes из @Consumes (MediaType.APPLICATION_OCTET_STREAM) к @Consumes (MediaType. MULTIPART_FORM_DATA)

и удаление заголовка из запроса клиента HTTP

Смежные вопросы