2016-08-31 8 views
0

私はジャージーを使用してWebサービスを作成しています。 REST APIにdeleteメソッドがあり、ArrayListをJersey ClientからREST APIに渡す必要があります。そこに、私のArrayListタイプはDrugNamesBeanです。jerseyのurlでArrayListを送信するには?

私はこの方法で試しましたが、私はこれについて考えていません。以下は

Client client = ClientBuilder.newClient();   

List<DrugNamesBean> drugNamesBeans=new ArrayList<DrugNamesBean>(); 
DrugNamesBean bean1=new DrugNamesBean(); 
bean1.setIdDrugName(23974); 

DrugNamesBean bean2=new DrugNamesBean(); 
bean2.setIdDrugName(23975); 

DrugNamesBean bean3=new DrugNamesBean(); 
bean3.setIdDrugName(23976); 

drugNamesBeans.add(bean1); 
drugNamesBeans.add(bean2); 
drugNamesBeans.add(bean3); 

WebTarget webTarget=client.target("http://localhost:8080/Rest/rest/drug_names")     
      .path("/deleteDrugNames").queryParam("list", drugNamesBeans); 

String delete = webTarget.request(MediaType.APPLICATION_JSON_TYPE).delete(new GenericType<String>(){}); 

System.out.println("Deleted - " + delete); 

私のREST APIのメソッド

@DELETE 
    @Path("/deleteDrugNames") 
    public String deleteDrugNames(@QueryParam("list")List<DrugNamesBean> drugNamesBeans){ 

     DrugNamesInterface drugNamesInterface=new DrugNamesTable(); 
     String deleteDrugNames = drugNamesInterface.deleteDrugNames(drugNamesBeans); 
     return deleteDrugNames; 
    } 

はあなたにこのことについてどんな考えを持っていますか?

UPDATE

私はjersey postを使用して、上記行うことができます。以下のように、

Client client = ClientBuilder.newClient();   

    List<DrugNamesBean> drugNamesBeans=new ArrayList<DrugNamesBean>(); 
    DrugNamesBean bean1=new DrugNamesBean(); 
    bean1.setIdDrugName(23977); 

    DrugNamesBean bean2=new DrugNamesBean(); 
    bean2.setIdDrugName(23978); 

    DrugNamesBean bean3=new DrugNamesBean(); 
    bean3.setIdDrugName(23979); 

    drugNamesBeans.add(bean1); 
    drugNamesBeans.add(bean2); 
    drugNamesBeans.add(bean3); 

    WebTarget webTarget=client.target("http://localhost:8080/Rest/rest/drug_names")     
      .path("/deleteDrugNames"); 

    webTarget.request(MediaType.APPLICATION_JSON_TYPE) 
       .post(Entity.entity(drugNamesBeans, MediaType.APPLICATION_JSON)); 

REST APIのメソッド、

@POST 
@Path("/deleteDrugNames") 
@Consumes(MediaType.APPLICATION_JSON) 
public String deleteDrugNames(List<DrugNamesBean> drugNamesBeans){ 

    DrugNamesInterface drugNamesInterface=new DrugNamesTable(); 
    String deleteDrugNames = drugNamesInterface.deleteDrugNames(drugNamesBeans); 
    return deleteDrugNames; 
} 

どのように私はjersey deleteの代わりjersey postを使用することができますか?一般に

+0

RESTは単なるメークアップではありません。 DELETEは、URIによって識別されるリソースを「削除」するために使用される残りの動詞です。 –

+0

@ScaryWombat:OK ....だから、あなたは間違ったキーワードを使用したことを意味しますか?私はPOSTを使うべきですか? – Barrier

+1

ここに行くhttp://www.restapitutorial.com/ –

答えて

1

は削除のほとんどは、その後、クエリパラメータには以下のいずれかのURL

http://localhost:8080/Rest/rest/drug_names/ {ID}

とが、複数のレコードの削除が要求されているあなたのケースで単一のレコードの削除にするために使用しました方法。私はあなたのコードを見るとき、Beanは、任意の薬物のためのユニークな値である "durgName"値だけを含んでいるので、URLの値のリストをカンマ区切り(または値を区別する任意の記号)としてリストを渡す方が良い。

http://localhost:8080/Rest/rest/drug_names/deleteDrugNames?list=23974,23975

1

あなたは使うべき

@QueryParam("drugId") List<Long> drugIds 

ため

DELETE http://localhost:8080/Rest/rest/drugs?drugId=1&drugId=2&drugId=3 

またはのための単一のId

@PathParam("drugId") Long drugId 
DELETE http://localhost:8080/Rest/rest/drugs/{drugId} 

QueryParamとして渡すBeanのリストの代わりに。 HTTP DELETEが使用されているので、削除することが既に明らかになっているので、deleteDrugNamesをパスから削除することをお勧めします。薬剤情報を取得するために同様の方法HTTP GET http://localhost:8080/Rest/rest/drugs?drugId=1&drugId=2&drugId=3を作成できます。また、drug_namesをdrugに変更します。いくつかのサーバーが設定されていない限り、サポートしていない可能性があるので、HTTP DELETEリクエスト内でエンティティの本文を渡すことは避けることをお勧めします - Jersey test - Http Delete method with JSON request

+1

@POSTを@DELETEに変更しようとすると例外はありますか? – Justas

+0

はい私はそれを得た。私はそれを説明する方法を知らない。 – Barrier

+0

スレッドに投稿してください。 – Justas

2

私が知っているリストを渡すには2通りの方法があります。

@MatrixParam("drugId") List<Long> drugIds) 

http://localhost:8080/Rest/rest/drugs?drugId=1;drugId=2;drugId=3; 

@QueryParam("drugId") List<Long> drugIds 

http://localhost:8080/Rest/rest/drugs?drugId=1&drugId=2&drugId=3 

ティム・シルベスターの答えhere

からの重要な違いは、クエリパラメータは、全体としての要求に適用される一方で、マトリックスパラメータは、特定のパス要素に適用されることです。

+1

POSTをDELETEに変更すると、エラーが表示されます。 – GreyGoose

関連する問題