Java 具有null put方法的Jersey客户端
我正在为我的一项服务处理Jersey服务客户端,在确定通过客户端put传递空实体的最佳方式时遇到困难。在服务端,这是我的端点:Java 具有null put方法的Jersey客户端,java,jersey,jersey-client,Java,Jersey,Jersey Client,我正在为我的一项服务处理Jersey服务客户端,在确定通过客户端put传递空实体的最佳方式时遇到困难。在服务端,这是我的端点: @PUT @Path("/rule/disable/key/{key}") @Produces(MediaType.APPLICATION_JSON) public Response disableRuleByKey(@PathParam("key") String key) throws Exception { try {
@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负载
无论如何,在客户端,我有一个通用的putItem()
代码供我的所有客户端通过扩展使用:
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();
}
公共静态布尔putItem(客户端、字符串uri、T项)
抛出中断异常,
执行例外{
调用putConfig=client.target(uri.request())
.buildPut(Entity.Entity(item,MediaType.APPLICATION_JSON));
Future asyncResponse=putConfig.submit();
Response=asyncResponse.get();
返回响应。getStatus()==状态。确定。getStatusCode();
}
这将s放入数据库,并使用JSON有效负载,但是由于上面的方法没有明确的有效负载,我想知道最好的做法是什么。修改调用的.buildPut()
使其包含null
是否可以,因为我没有传递有效负载
我也愿意修改端点,但这是我目前拥有的,无法找到将此值发送到后端的最佳方式。我是否应该修改端点以使用JSON对象,而不是将密钥作为@PathParam
传递?当使用请求替换资源的状态时,应该在请求负载中发送新的表示
看看RFC 7231,它是HTTP/1.1中语义和内容的当前参考:
PUT
方法请求创建目标资源的状态,或将其替换为请求消息负载中包含的表示所定义的状态。[……]
酷。那么这是否意味着端点不应该严格使用@PathParam(String key)
,而应该是disableRuleByKey(String key)
和一个响应JSON负载?@erp Yes。使用URL定位资源和请求的有效负载,以向服务器发送资源的新表示。