2016-08-09 13 views
1

私は自分のサービスの1つとしてJerseyサービスクライアントを開発中で、クライアントのputを介してヌルエンティティを渡す最善の方法を決定する際に問題があります。 null putメソッドを使用したジャージークライアント

@PUT 
    @Path("/rule/disable/key/{key}") 
    @Produces(MediaType.APPLICATION_JSON) 
    public Response disableRuleByKey(@PathParam("key") String key) 
     throws Exception { 
    try { 
     DAL.getWriter().disableRuleByKey(key); 
     return Response.ok().build(); 
    } catch (BlahException bla) { 
     throw de; 
    } 

は基本的にすべての方法は、バックエンドで使用するアプリケーションの他の部分のためのトグルを反転されない:物事のサービス側では、これは私のエンドポイントです。 putがここで使う正しい呼び出しであるかどうかは分かりません(ただし、これはチームメイトによって書かれています)。私はそれがJSONペイロードを持っていないことも知っています。

とにかく、クライアント側では、私は私のクライアントのすべてがextends経由で使用するために、この一般的なputItem()コードを持っている:JSONペイロードとデータベースの罰金にこのPUT

public static <T> boolean putItem(Client client, String uri, T item) 
     throws InterruptedException, 
     ExecutionException { 
    Invocation putConfig = client.target(uri).request() 
     .buildPut(Entity.entity(item, MediaType.APPLICATION_JSON)); 
    Future<Response> asyncResponse = putConfig.submit(); 
    Response response = asyncResponse.get(); 

    return response.getStatus() == Status.OK.getStatusCode(); 
    } 

が、上記の方法から特にペイロードを持っていない私は、何が最善の行動をとるのだろうと思っていた。呼び出しの.buildPut()を変更してnullとすると、ペイロードを渡していないので問題ありません。

私はエンドポイントも変更していますが、これは私が現在持っているものであり、この値をバックエンドに送る最良の方法を理解できません。キーを@PathParamとして渡すのではなく、JSONオブジェクトを消費するようにエンドポイントを変更するだけですか?

答えて

1

リソースの状態をPUT要求に置き換えるときは、要求ペイロードに新しい表現を送信する必要があります。

4.3.4. PUT

ターゲット・リソースの状態が作成または交換することがPUTメソッド要求:

はRFC 7231、セマンティクスおよびHTTP/1.1でのコンテンツの現在の参照を見て持っています要求メッセージのペイロードに囲まれた表現によって定義された状態を有する。 [...]

+0

クール。それでは、エンドポイントが '@PathParam(String key)'を厳密に使用するのではなく、 'disableRuleByKey(String key)'とそれに対応するJSONペイロードのみにする必要がありますか? – erp

+0

@erpはい。 URLを使用して、リソースと、リソースの新しい表現をサーバーに送信するリクエストのペイロードを特定します。 –