我有一个看起来像这样的课程:
@Path("/applications")
public class ApplicationActivity extends BaseGravityActivity {
@GET
@Path("/{application_name}")
public Response getApplication(@PathParam("application_name") final String appName) {
final Object app = doSth(appName);
return ((app == null) ? Response.status(Response.Status.NOT_FOUND) : Response.ok(app)).build();
}
@PUT
@Path("/")
public Response editApplication(final Object v) {
final Object updated = doUpd(v);
return Response.ok(updated).build();
}
}
现在,当我编写单元测试用例时,
request = MockHttpRequest.put("/applications/");
request.accept(SupportedMediaTypes.TEXT_PLAIN.mediaType);
request.setInputStream(new ByteArrayInputStream(payload.toString().getBytes()));
response = new MockHttpResponse();
dispatcher.invoke(request, response);
我得到javax.ws.rs.NotFoundException:无法找到完整路径的资源:applications / get方法工作正常。我该怎么纠正这个?
注意: 1.我认为我的资源是一个集合(一套准确)和" put"方法添加/替换集合中的项目。我不认为在路径中添加一个参数(比如应用名称)对我的资源有意义。
如何在未在put路径中指定app_name的情况下使其工作。
答案 0 :(得分:0)
删除@Path
注释并执行PUT
至/applications
。
您还应添加@Consumes
和@Produces
注释,以告知Resteasy您支持请求和响应的媒体类型。
@PUT
@Consumes(MediaType.TEXT_PLAIN)
@Produces(MediaType.TEXT_PLAIN)
public Response editApplication(final Object v) {
final Object updated = doUpd(v);
return Response.ok(updated).build();
}
答案 1 :(得分:0)
我通过移除" /"来实现它。在与该类关联的@Path注释中。
我的代码现在看起来像这样
@Path("applications")
public class ApplicationActivity extends BaseGravityActivity {
@GET
@Path("/{application_name}")
public Response getApplication(@PathParam("application_name") final String appName) {
final Object app = doSth(appName);
return ((app == null) ? Response.status(Response.Status.NOT_FOUND) : Response.ok(app)).build();
}
@PUT
public Response editApplication(final Object v) {
final Object updated = doUpd(v);
return Response.ok(updated).build();
}
}
现在一切都很好。
当然 - @Produces和@Consumes现在也是我代码的一部分。