Java 如何在jersey中发送带有url的ArrayList?

Java 如何在jersey中发送带有url的ArrayList?,java,rest,http,arraylist,jersey,Java,Rest,Http,Arraylist,Jersey,我正在使用jersey创建一个web服务。我在RESTAPI中有一个delete方法,我需要将ArrayList从Jersey客户端传递给RESTAPI。在那里,我的ArrayList类型是DrugNamesBean <pre> <code> import java.util.List; import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.core.Context; import java

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

<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]
我试过用这种方法,但我对此一无所知

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); 
RESTAPI方法

@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

一般来说,大多数删除都是删除带有url的单个记录

{id}

但在需要删除多个记录的情况下,查询参数就是其中之一。当我看到您的代码时,bean只包含durgNamevalue,这是任何药物的唯一值,因此最好以逗号分隔或任何符号传递列表,以区分url中的值列表


一般来说,大多数删除都是删除带有url的单个记录

{id}

但在需要删除多个记录的情况下,查询参数就是其中之一。当我看到您的代码时,bean只包含durgNamevalue,这是任何药物的唯一值,因此最好以逗号分隔或任何符号传递列表,以区分url中的值列表

你应该使用

@QueryParam("drugId") List<Long> drugIds
还是单一身份证

为了

而不是作为QueryParam传递的bean列表。建议从路径中删除deleteDrugNames,因为使用了HTTP DELETE,所以已经很清楚您正在删除-您可以使用类似的方法HTTP GEThttp://localhost:8080/Rest/rest/drugs?drugId=1&drugId=2&drugId=3 用于检索药物信息。同时将药物名称改为药物。我建议避免在HTTP DELETE请求中传递实体体,因为某些服务器可能不支持该请求,除非已配置-

您应该使用

@QueryParam("drugId") List<Long> drugIds
还是单一身份证

为了


而不是作为QueryParam传递的bean列表。建议从路径中删除deleteDrugNames,因为使用了HTTP DELETE,所以已经很清楚您正在删除-您可以使用类似的方法HTTP GEThttp://localhost:8080/Rest/rest/drugs?drugId=1&drugId=2&drugId=3 用于检索药物信息。同时将药物名称改为药物。我建议避免在HTTP DELETE请求中传递实体体,因为某些服务器可能不支持它,除非配置-

有两种方法可以传递我知道的列表

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

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

Tim Sylvester的回答

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


有两种方法可以传递我知道的列表

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

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

Tim Sylvester的回答

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


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

问题:
您希望从url收集数据,因此使用@Context UriInfo uri对象可以直接以列表形式获取数据。

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

问题: 您希望从url收集数据,所以使用@Context UriInfo uri对象
可以直接以列表形式获取数据。

REST不仅仅是您可以编写的东西。DELETE是一个rest动词,用于删除URI标识的资源。@ScaryWombat:好的……那么,你是说我使用了错误的关键字?我应该使用POST吗?给你,休息不仅仅是你可以弥补的。DELETE是一个rest动词,用于删除URI标识的资源。@ScaryWombat:好的……那么,你是说我使用了错误的关键字?我应该使用POST吗?给你,如果你试图将@POST更改为@DELETE,你会得到任何异常吗?是的,我得到了一个。我不知道怎么解释。如果你试图将@POST改为@DELETE,你会有什么例外吗?是的,我有一个例外。我不知道该怎么解释。发布将帖子更改为删除时出现的错误。发布将帖子更改为删除时出现的错误。您还可以提供代码的简要说明吗?问题:您希望从url收集数据,所以使用@Context-UriInfo-uri对象可以直接获取列表形式的数据。您还可以提供代码的简要说明吗?问题:并且您希望从url收集数据,所以使用@Context-UriInfo-uri对象可以直接获取列表形式的数据。
DELETE http://localhost:8080/Rest/rest/drugs/{drugId}
@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
<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]