在DELETE方法Jersey中是否需要@Consumes注释或者是可选的

时间:2016-11-25 10:16:30

标签: java rest jersey

我是泽西休息服务的新手,我想在这个例子中理解在删除方法中添加@Consumes注释的效用,在这种情况下,这是它运作良好的代码(在视频中),是@Consumes注释可选吗?提前致谢

 @path("activities")
 public class ActivityResource {

    @DELETE
    @Path("{activityId}")
    @Consumes(MediaType.APPLICATION_JSON)
    @Produces({MediaType.APPLICATION_JSON,MediaType.APPLICATION_XML})
    public Response delete(@PathParam("activityId")String activityId) {
        activityRepository.delete(activityId);
        return Response.ok().build() ;
    }
}

2 个答案:

答案 0 :(得分:1)

  

此处@Consumes注释是否可选?

是的,我甚至会说它不需要,因为你只有一个参数,它是PathParam,这意味着它将从路径中提取出来。

注释@Consumes用于指示JAX-RS实现如何动态解析/反序列化请求正文,以便将其作为参数以更方便的方式使用。

例如:

@POST
@Consumes("application/xml")
public void registerUser(User user) {
    ...
}

在此示例中,我们指示请求的主体是application/xml类型,然后JAX-RS实现将主体的内容解析为XML,最终获得User的实例。

NB:使用的HTTP方法对是否需要@Consumes没有影响,只需解析身体问题。

答案 1 :(得分:1)

DELETE对请求正文中的任何内容都不感兴趣。它应该只根据URI识别要删除的资源。

删除@Consumes,这里错了。

另请考虑返回HTTP状态204 No Content而不是200 OK。删除资源后,无法返回任何内容。您也应该删除@Produces