我的资源中有两种POST方法和一种DELETE。它们具有相同的路径。
我用@DefaultMethod注释了一个POST,因此当某人未发送正确的Accept标头时,将选择正确的方法。但这导致在调用DELETE时,cxf选择POST而不是正确的删除方法。有什么解决方法吗?
CXF版本:3.1.17
@DefaultMethod
@POST
@Consumes(MeasurementMediaType.MEASUREMENT_TYPE)
@Produces(MeasurementMediaType.MEASUREMENT_TYPE)
public Response post(MeasurementRepresentation measurementRepresentation, @HeaderParam(value = HttpHeaders.ACCEPT) String acceptHeader) URISyntaxException {
...
}
@POST
@Consumes(MEASUREMENT_COLLECTION_TYPE)
@Produces(MEASUREMENT_COLLECTION_TYPE)
public Response post(MeasurementCollectionRepresentation measurementCollectionRepresentation, @HeaderParam(value = HttpHeaders.ACCEPT) String acceptHeader) {
...
}
@DELETE
public Response delete(
@QueryParam("fragmentType") String fragmentType,
@QueryParam("source") String source,
@QueryParam("dateFrom") DateTime dateFrom,
@QueryParam("dateTo") DateTime dateTo,
@QueryParam("type") String type) {
...
}
java.lang.NullPointerException
at com.cumulocity.measurement.rest.resources.MeasurementCollectionResource.post(MeasurementCollectionResource.java:280)
答案 0 :(得分:0)
两件事:
1)DefaultMethod似乎不是指要选择的默认方法,而是默认的HTTPMethod。因此,它实际上是覆盖了呼叫的http方法。这是JAX-RS的CXF扩展,因此您可以要求CXF团队更新功能或为您的用例创建新的注释。
2)如果我对您的理解正确,那么您是否希望在有人发送{“ Hello”:“ World”}的正文时调用第一个方法?然后,在尝试构建MeasurementRepresentation时,您是否会出错?如果他们发送了错误的请求,为什么不让CXF用适当的HTTP错误代码进行响应?