Java Jersey@Consumes端点如何匹配?

Java Jersey@Consumes端点如何匹配?,java,rest,jersey,jax-rs,jersey-2.0,Java,Rest,Jersey,Jax Rs,Jersey 2.0,我正在设计一个RESTful端点来接收文件。我希望它能同时接受普通文件/流和多部分的发布。servlet容器如何匹配端点有规则吗?下面的代码是否可靠地工作,或者此实现是特定的?我可以使用通配符吗,或者我必须将其限制为应用程序的八位字节流吗 @Path("foo") public class Foo { @POST @Path("{filename}") @Consumes(MediaType.WILDCARD) public Response uploadFile

我正在设计一个RESTful端点来接收文件。我希望它能同时接受普通文件/流和多部分的发布。servlet容器如何匹配端点有规则吗?下面的代码是否可靠地工作,或者此实现是特定的?我可以使用通配符吗,或者我必须将其限制为应用程序的八位字节流吗

@Path("foo")
public class Foo {
    @POST
    @Path("{filename}")
    @Consumes(MediaType.WILDCARD)
    public Response uploadFileDirect(
        @PathParam("filename") String filename,
        InputStream is)
    {
        // process input stream
        Response.ok().build();
    }

    @POST
    @Path("{filename}")
    @Consumes(MediaType.MULTIPART_FORM_DATA)
    public Response uploadFileMultipart(
        @PathParam("filename") String filename,
        @FormDataParam("file") InputStream is)
    {
        // process input stream
        Response.ok().build();
    }
}
这在3.7.2请求匹配中有规定

[……]

找到资源类/对象,并将所有资源和子资源方法放入集合
M

[……]

  • 确定将处理请求的方法:
    a。通过删除不符合以下条件的成员来筛选
    M

    […]
    b。按降序排列
    M
    ,如下所示:
    *主键是输入数据的媒体类型。首先对
    @Consumes
    值与请求的媒体类型最匹配的方法进行排序。
    *辅助键是
    @产生的
    值。首先对其值
    @products
    与请求接受头的值最匹配的方法进行排序
  • 确定最佳匹配的媒体类型遵循一般规则:
    n/m
    n/*
    */*
    ,即在使用或产生
    */*
    的方法之前,对显式使用请求媒体类型或产生请求媒体类型之一的方法进行排序


    如果你看最后一段(确定最佳匹配),它说
    */*
    MediaType.WILDCARD
    )的优先级最低。更具体的媒体类型总是会赢。

    我认为最好删除通配符。因为没有这样的句子。@user1419950我不确定我是否理解。第一个端点不是多部分的,只有第二个端点是。也存在通配符