She*_*nar 0 android web-services jax-rs
我使用 RESTful 方法编写了一个 Web 服务,并且有不止一种接受 POST 请求的方法,例如:
@Path("/user")
class User{
@POST
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
@Produces(MediaType.APPLICATION_JSON)
public UserMasterDto getUserDetails(MultivaluedMap<String, String> userParams) {
// other stuff..
}
@POST
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
@Produces(MediaType.APPLICATION_JSON)
public UserMasterDto getUserDetails2(MultivaluedMap<String, String> userParams){
// other stuff..
}
}
Run Code Online (Sandbox Code Playgroud)
getUserDetails2我想从 Android 应用程序中调用特定的方法。我需要做什么?
您当前的服务代码设置方式我认为它会抛出某种媒体类型冲突异常,因为您有两种方法都在同一 URL 上为同一消费媒体类型提供请求。
如果您想调用其中一种方法,则需要消除它们的歧义。一个非常简单的解决方案是这样的:
@Path("/user")
public class User {
@Path("1")
@POST
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
@Produces(MediaType.APPLICATION_JSON)
public UserMasterDto getUserDetails(MultivaluedMap<String, String> userParams) {
// ...
}
@Path("2")
@POST
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
@Produces(MediaType.APPLICATION_JSON)
public UserMasterDto getUserDetails2(MultivaluedMap<String, String> userParams) {
// ...
}
}
Run Code Online (Sandbox Code Playgroud)
@Path请注意方法上的额外内容。现在从您的客户端,如果您访问/user/1第一个方法将被调用,如果您访问/user/2第二个方法将被调用。
您甚至可以只有一种方法并根据路径参数进行区分,如下所示:
@Path("/user")
public class User {
@Path("{x}")
@POST
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
@Produces(MediaType.APPLICATION_JSON)
public UserMasterDto getUserDetails(
@PathParam("x") int x,
MultivaluedMap<String, String> userParams) {
if (x == 1) {
//do something
} else if (x == 2) {
//do something else
}
// ...
}
}
Run Code Online (Sandbox Code Playgroud)
您甚至可以使用正则表达式,如果多个方法可以应用于同一个 URL,则会触发一些优先规则。
请记住,REST 不是调用服务器上的方法,而是访问资源。因此,为了避免混淆(人们可能会认为1是2某些用户的 ID),您可能需要仔细选择您的 URL(以上只是一个示例)。这实际上取决于您最喜欢的方式以及您的确切需求。
| 归档时间: |
|
| 查看次数: |
4815 次 |
| 最近记录: |