RESTful web服务-多个POST方法。如何从android应用程序调用特定的一个?

RESTful web服务-多个POST方法。如何从android应用程序调用特定的一个?,android,web-services,jax-rs,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>

我使用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..
    }
}
@Path(“/user”)
类用户{
@职位
@使用(MediaType.APPLICATION\u FORM\u URLENCODED)
@产生(MediaType.APPLICATION_JSON)
公共UserMasterDto getUserDetails(多值Map userParams){
//其他东西。。
}
@职位
@使用(MediaType.APPLICATION\u FORM\u URLENCODED)
@产生(MediaType.APPLICATION_JSON)
公共UserMasterDto getUserDetails2(多值map userParams){
//其他东西。。
}
}
我想从Android应用程序调用一个特定的方法,比如
getUserDetails2

我需要做什么?

您当前设置服务代码的方式我认为它会引发某种媒体类型冲突异常,因为您有两种方法,它们都在同一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) {
        // ...
    }
}
@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
        }

        // ...
    }
}
您甚至可以,如果多个方法可以应用于同一个URL,则会触发一些


请记住,REST不是调用服务器上的方法,而是访问资源。因此,为了避免混淆(人们可能认为
1
2
是一些用户的ID),您可能需要仔细选择URL(上面只是一个示例)。这实际上取决于您最喜欢它的方式以及您的确切需求。

您当前的服务代码设置方式我认为它会引发某种媒体类型冲突异常,因为您有两种方法,它们都在同一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) {
        // ...
    }
}
@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
        }

        // ...
    }
}
您甚至可以,如果多个方法可以应用于同一个URL,则会触发一些

请记住,REST不是调用服务器上的方法,而是访问资源。因此,为了避免混淆(人们可能认为
1
2
是一些用户的ID),您可能需要仔细选择URL(上面只是一个示例)。这真的取决于你最喜欢它的方式以及你的确切需求