没有路径参数的RestEasy方法

时间:2014-11-19 04:18:37

标签: jax-rs resteasy

我有一个看起来像这样的课程:

@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"方法添加/替换集合中的项目。我不认为在路径中添加一个参数(比如应用名称)对我的资源有意义。

  1. 如果我添加@Path(" / {app_name}")并传递应用名称,则该方法可以正常工作。
  2. 如何在未在put路径中指定app_name的情况下使其工作。

2 个答案:

答案 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现在也是我代码的一部分。