2017-08-30 6 views
0

私はKarafの中でホストされているRESTサービスを持っています。これはマルチパートリクエスト以外のすべてのリクエストでうまく機能しています。私はcom.sun.jerseyパッケージを使用しています。私はこれらのURLをHTTP経由でアクセスできるようにホストすることに成功しただけです。私はPOST内HttpServletRequestを受け取り、それにgetParts()メソッドを呼び出すしようとすると、私はエラーを取得するJAX-RS Multipart with com.sun.jersey

IllegalStateException: No multipart config for servlet

私は私のサーブレットに注釈をしないのですという私を発見したので、私私が使用しているサーブレットの実装にこれを追加しました。私はcom.sun.jersey.spi.container.servlet.ServletContainerを拡張し、そのクラスにアノテーションを追加します。しかし、これは機能しません。

私は、エラーを再現HttpServletクラスの私自身の延長使用してみました:私はResourceConfigに登録MultiPartFeatureクラスを作るorg.glassfish.jerseyパッケージを使用してのアプローチを見てきました

@MultipartConfig 
public class MultipartServlet extends HttpServlet { 

    @Override 
    public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException { 

     try { 
      final HttpServletRequest httpRequest = (HttpServletRequest)request; 
      final Collection<Part> parts = httpRequest.getParts(); 

      System.out.println("There are " + parts.size() + " parts"); 
     } 
     catch (Exception exception) { 
      System.out.println("MEGA FAIL"); 
      System.out.println(exception.getMessage()); 
     } 

     super.service(request, response); 
    } 
} 

を、しかし、私はこれらのパッケージをKaraf内のHTTP経由でアクセスできるようにはできませんでした(サービスはエラーなしで登録するように見えますが、すべてのリクエストは404応答を返します)。

+0

ですべての部分にアクセスすることができますこの方法では、なぜあなたは、サーブレットでマルチパートを使用しようとしています。 Jersey 1.xのマルチパートサポートについては、[この記事](https://www.mkyong.com/webservices/jax-rs/file-upload-example-in-jersey/)を参照してください。 –

+0

その記事では、マルチパート要求。私は、メソッド自体の本体内で未知数の部分を扱うことができる必要があります。そのため、私は 'HttpServletRequest'を使用しようとしていました。代わりにジャージーを使用してこれを達成する方法はありますか? –

+0

@peeskillet Karafの内部でこれを実行していることを強調する価値がありますので、Karafと一緒にインストールされた 'HttpService'に対してこのサーブレットを登録しました。これは、RESTfulサービスをホストする唯一の方法でしたKarafはHTTP経由でアクセス可能でした(つまり、localhost:8181)。それに近づくより良い方法があれば、どんな方向にも感謝されます –

答えて

1

サーブレットのマルチパートを使用する代わりに、Jersey's multipart supportを使用してください。リンクの例では、名前付き部分を使用しています。未知の部分をすべて処理できるようにするには、メソッドパラメータとしてFormDataMultiPartを使用します。あなたはジャージーでそれをしたいときにgetFields()

@POST 
@Consumes(MediaType.MULTIPART_FORM_DATA) 
public Response post(FormDataMultiPart multiPart) { 
    final Map<String, List<FormDataBodyPart>> = multiPart.getFields(); 
} 
関連する問題