@Produces和@Consumes的jersey(dropwizard)默认媒体类型

时间:2014-09-30 08:57:10

标签: java rest jersey jersey-2.0 dropwizard

默认情况下,我们的应用程序中的所有方法都是基于JSON的。我想避免将@Produces和@Consumes(可能是可选的,不确定)添加到每个Resource类,如下所示。

@Path("/test")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public class TestResource {

  @GET
  public TestClass test() {
    return new TestClass();
  }
}

如果我没有定义媒体类型,它目前使用 application / octet-stream 。我希望有一种方法可以通过泽西的ResourceConfig或其他方式将其改为其他东西。在源代码中查看但迷路了。

目前dropwizard使用的是jersey 1.18,但很快就会更新到2.0(希望:))。所以两个版本的答案都将受到赞赏。

1 个答案:

答案 0 :(得分:1)

也许这可以通过ContainerRequestFilter来完成。在那里你可以修改ACCEPT标题。如果你只将它设置为json,那么这可以提供帮助。您是否尝试仅将REST客户端中的ACCEPT标头字段设置为JSON?这有帮助吗?

或者您只需使用json构建响应:

@GET
@Path("get")
public Response getInTestResource()
{
    return Response.status(Status.OK).type(MediaType.APPLICATION_JSON).entity("get is ok").build();
}

但是有一个问题:如果你记录这个方法消耗或产生什么,这真的太过分了吗?我认为这个注释并不是额外的工作......