【发布时间】:2017-06-15 06:12:18
【问题描述】:
我正在与 Dropwizard 合作,它在内部使用 Jersey。我在控制器上有两种方法:
PUT /garbage/[id1,id2,...idN] 旨在采用路径参数,该参数是表示要更新的资源的数字 ID 列表。我在这里使用基于正则表达式的PathParam。我在这个例子中捏造了正则表达式,因为我认为这并不重要,但关键是单个数字 ID 应该与正则表达式匹配。
GET /garbage/[id] 获取有关单个垃圾的数据。
Jersey 似乎有些困惑,尽管方法不同。当我用类似的东西查询时
curl localhost:8080/garbage/1
Jersey 给我一个 405 错误。如果我将 PUT 从图片中取出(例如,破坏路径参数正则表达式,或完全删除它),GET 端点工作正常。
我认为在 JAX-RS 3.7.2 中有一些我遗漏的细节解释了为什么会出现这种情况,但我无法弄清楚它是什么。
代码如下:
@Path("/garbage")
@Produces(MediaType.APPLICATION_JSON)
public class GarbageController {
private static final Logger LOG = LoggerFactory.getLogger(GarbageController.class);
@PUT
@Path("/{params: [\\d,]+}")
@Consumes(MediaType.APPLICATION_JSON)
@Timed
public Response updateGarbage(@PathParam("params") List<PathSegment> params) {
LOG.warn("updateGarbage");
return Response.status(Response.Status.OK).build();
}
@GET
@Path("/{garbageId}")
public Response getGarbageById(@PathParam("garbageId") long garbageId) {
LOG.warn("getGarbage");
return Response.status(Response.Status.OK).build();
}
}
【问题讨论】:
标签: java rest jersey dropwizard