2017-08-10 12 views
1

私はJAX-RSとJerseyについて学んでいます。私は、しかし、私は私が解決するのか分からない問題が発生しているURLにデータを投稿しようとしています:Jersey Client投稿フォームデータ

Form formData = new Form(); 
formData.param("merchant_id", mPayment.getMerchantId()); 
formData.param("transaction_id", mPayment.getTransactionId()); 
formData.param("code", mPayment.getCode()); 
formData.param("amount", String.valueOf(mPayment.getAmount())); 
formData.param("desc", mPayment.getDesc()); 
formData.param("phone", mPayment.getPhone()); 

Response response = target.path("process").request() 
     .accept(MediaType.APPLICATION_JSON) 
     .post(Entity.form(formData)); 

それはちょうどしかし、サーバーがフィールドの浮動小数点データ型を期待している文字列だとき、今、すべてがうまく動作ししかし、私はそれを使用しようとするとString.valueOf()私はエラーが発生します。投稿できるように、データ型の異なるパラメータを追加するにはどうすればよいですか?

+1

は、それが必要な場合にフロートにキャストするサーバの責任です心配しないでください。単純にすべてを文字列に変換して送信することができます。したがって、あなたのコードは正しいです。 –

+1

FYI - 'param'は文字列パラメータ(https://github.com/jax-rs/api/blob/master/jaxrs-api/src/main/java/javax/ws/rs/core/Form)のみをとります。期待どおりのJava。 –

答えて

1

サーバーへの呼び出しで型情報を維持することはできません。フォームデータは、application/x-www-form-urlencodedコンテンツタイプヘッダーを使用してテキストとして転送されます。これは、フォームクラスがStringパラメータ値を受け入れる理由です(ブラウザフォームでテキスト値を入力する方法と同様です)。

コードで十分です。サーバー側では、パラメータを浮動小数点として宣言し、javax.ws.rs.FormParamで注釈を付けることができます。パラメータがJerseyランタイムによって必要な(float)型にキャストできない場合は、400 BAD REQUESTを返します。一言で言えば

:それはあるよう

  • は、クライアントコードを保管してください。似
  • 使用サーバコード:

    import javax.ws.rs.FormParam; 
    import javax.ws.rs.POST; 
    import javax.ws.rs.Path; 
    import javax.ws.rs.core.Response; 
    
    @Path("/service") 
    public class myService { 
    
        @POST 
        public Response addOrder(
         @FormParam("merchant_id") String merchant_id, 
         @FormParam("amount") float amount 
         // more parameters 
         ) { 
    
         return Response.ok().build(); 
        } 
    } 
    
+0

それは不可能だと言っているし、回避策はないと私のための唯一の解決策は、サーバー上のフロートにキャストすることでしょうか? – user3718908

+0

はい、キャストは自分で行う必要はありませんが、FormParamで注釈を付けたパラメータを浮動小数点として宣言できます。 int形式のパラメータをとるこのコード例を参照してください。 http://www.mkyong.com/webservices/jax-rs/jax-rs-formparam-example/ –

+0

しかし、値はフォームからは得られません。 – user3718908

関連する問題