Jersey-JAX/RS-如何使用不同的处理程序处理不同的内容类型
我想使用Jersey/JAX-RS使用不同的处理程序为相同的RESTURL处理两种不同的媒体类型。这可能吗 例如:Jersey-JAX/RS-如何使用不同的处理程序处理不同的内容类型,jersey,jax-rs,Jersey,Jax Rs,我想使用Jersey/JAX-RS使用不同的处理程序为相同的RESTURL处理两种不同的媒体类型。这可能吗 例如: @Path("/foo") public class FooHandler { @POST @Path("/x") @Consumes("application/json") public Response handleJson() { } @POST @Path("/x") @Consumes("applica
@Path("/foo")
public class FooHandler {
@POST
@Path("/x")
@Consumes("application/json")
public Response handleJson() {
}
@POST
@Path("/x")
@Consumes("application/octet-stream")
public Response handleBinary() {
}
}
是的,这是可能的。在确定资源方法时需要考虑很多因素,媒体类型就是其中之一。客户端需要确保在发送请求时设置
内容类型
头
如果您想了解资源方法选择背后的确切科学,您可以阅读。您可以在3.7.2-3.b中具体看到有关介质类型的部分
简单测试
@Path("myresource")
public class MyResource {
@POST
@Path("/x")
@Consumes("application/json")
public Response handleJson() {
return Response.ok("Application JSON").build();
}
@POST
@Path("/x")
@Consumes("application/octet-stream")
public Response handleBinary() {
return Response.ok("Application OCTET_STREAM").build();
}
}
@Test
public void testGetIt() {
String responseMsg = target.path("myresource")
.path("x").request().post(Entity.entity(null,
"application/octet-stream"), String.class);
System.out.println(responseMsg);
responseMsg = target.path("myresource")
.path("x").request().post(Entity.entity(null,
"application/json"), String.class);
System.out.println(responseMsg);
}
上述测试将始终打印出来
应用八位字节流应用程序JSON