Java Jersey@Consumes端点如何匹配?
我正在设计一个RESTful端点来接收文件。我希望它能同时接受普通文件/流和多部分的发布。servlet容器如何匹配端点有规则吗?下面的代码是否可靠地工作,或者此实现是特定的?我可以使用通配符吗,或者我必须将其限制为应用程序的八位字节流吗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
@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我不确定我是否理解。第一个端点不是多部分的,只有第二个端点是。也存在通配符