使用Jersey 1.8我有以下请求:
@DELETE
@Path("{itemids: [A-Fa-f0-9]+}")
public void deleteInstance(@PathParam("itemids") final PathSegment itemIdsPath) {
....
}
如果我发送路径为/delete/1;2;3
的http请求,那么它可以正常工作。但是,如果分号被转义,那么路径看起来像/delete/1%3B2%3B3
,那么Jersey返回404错误。泽西岛应该拒绝这些后面的请求,还是应该在匹配矩阵参数之前解码路径?
答案 0 :(得分:2)
它应该拒绝它们。 URL编码用于明确的原因,使用具有特殊含义的字符而没有这个含义。例如,您可以发送请求/delete/1;2;3%3B4
,这意味着包含细分1
,2
和3;4
的路径(如果这些是有效名称)。但是,由于您为每个段指定了[A-Fa-f0-9]+
的路径名称模式,因此拒绝对编码名称1;2;3
的请求,并返回404。