我正在使用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
?
答案 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¶meter2=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]