如何在泽西发送带有url的ArrayList?

时间:2016-08-31 06:05:24

标签: java rest http arraylist jersey

我正在使用jersey来创建一个Web服务。我在REST API中有一个删除方法,我需要将一个ArrayList从Jersey客户端传递给REST API。在那里,我的ArrayList类型是 DrugNamesBean

我试过这种方式,但我不知道这个。

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;
    }

你有什么想法吗?

更新

我可以使用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

5 个答案:

答案 0 :(得分: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

来自Tim Sylvester的回答here

  

重要的区别在于矩阵参数适用于特定路径元素,而查询参数作为整体应用于请求。

答案 1 :(得分:1)

通常,大多数删除操作都是删除带有URL的单个记录

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

但是在需要删除多个记录的情况下,查询参数就是其中之一。当我看到你的代码时,bean只包含&#34; durgName&#34;值,这是任何药物的唯一值,所以最好以逗号分隔(或任何符号来区分值)列表中的值传递网址。

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

答案 2 :(得分: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列表。建议从路径中删除deleteDrugNames因为HTTP DELETE已被使用,因此您已经清除了 - 您可以使用类似的方法HTTP GET http://localhost:8080/Rest/rest/drugs?drugId=1&drugId=2&drugId=3来检索药物信息。同时将drug_names改为药物。我建议避免在HTTP DELETE请求中传递实体主体,因为除非配置了某些服务器,否则某些服务器可能不支持它 - Jersey test - Http Delete method with JSON request

答案 3 :(得分:1)

在此示例中,我们将讨论如何使用@QueryParam批注来解析JAX-RS RESTful服务中的URI查询参数。 @QueryParam表示将解析具有相应名称的Query Parameter的值,如果解析正确,它将在 用@QueryParam表示的方法参数。在REST服务中,基本上有两种方法可以在GET请求中传递参数。其中之一是URI路径参数。 我们在方法上使用@Path(“ / {parameter}”)批注定义此参数。例如,将“ Enjoy”作为名为queryparam的查询参数的值传递, 您应该在URL后面使用以下模式:... / bbb?queryparam = Enjoy。通常可以使用@Context注释注入与以下内容相关的Java上下文类型 请求或响应。在使用servlet的JAX-RS应用程序中,可以使用ServletConfig,ServletContext,HttpServletRequest和HttpServletResponse对象。 使用@Context。

问题: http://localhost:8080/JAXRS-HelloWorld/rest/helloWorldREST/parameters?parameter2=Examples&parameter2=09709 并且您想从url收集数据,因此可以使用@Context UriInfo uri对象直接以列表形式获取数据。

答案 4 :(得分:0)

<pre>
<code>
import java.util.List;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.UriInfo;

@Path("/helloWorldREST")
public class HelloWorldREST {

    @GET
    @Path("/parameters")
    public Response responseMsg( @Context UriInfo uriInfo) {

        String parameter1 = uriInfo.getQueryParameters().getFirst("parameter1");

        List<String> parameter2=  uriInfo.getQueryParameters().get("parameter2");

        String output = "Prameter1: " + parameter1 + "\nParameter2: " + parameter2.toString();

        return Response.status(200).entity(output).build(); 
    }
}
</code>
</pre>

Use UriInfo  [QueryParam in Jax-rx][1]