JAX-RS资源方法签名

时间:2015-07-02 09:31:34

标签: java rest jersey jax-rs

我使用Jersey 2.19来实现REST API。

我想知道我是如何从Jersey用户指南或其他规范中找到我应该知道我的JAX-RS资源的签名应该是什么。

E.g。对于处理POST请求的资源,我已经使用我发现的示例尝试了以下不同的签名。

public Response myResource()
public Response myResource(String param)

这两个都是有效的,因为它们编译和运行,并且在适当的条件下调用该方法。

任何人都可以告诉我在哪里指定签名应该是什么以及参数是什么意思?这似乎是一个简单的问题,但我无法找到答案。

3 个答案:

答案 0 :(得分:0)

正如您所说的那样POST请求,因此它应该从请求中收到一些数据。所以你应该期待参数中的东西。 public Response myResource(String param)type参数应取决于实际@Consumes注释,如: -

@Consumes(MediaType.APPLICATION_JSON):这需要JSON输入OR @Consumes(MediaType.APPLICATION_XML):这需要XML输入OR @Consumes(MediaType.TEXT_PLAIN):这需要String纯文本输入

答案 1 :(得分:0)

您可以像official documentation中所述注释您的方法。 另外,不要忘记使用@Path

注释服务类
@Path("MyService")
public class MyService
{
    @GET
    @Produces(MediaType.APPLICATION_JSON)
    @Path("/User")
    public List<User> getUser()
    {
        //Return all users
    }

    //Inserts new User in JSON Format
    @Get
    @Path("/User/UserId/{userid}")
    public User getUserById(@PathParam("userid") String userid)
    {
        //Find User with ID in Database and return it
    }

    @POST
    @Consumes(MediaType.APPLICATION_JSON)
    public User getUserById(User user)
    {
        //add user to your Database or something
    }
}

如果您现在想要以json格式获取所有用户,则必须致电: http://ip-address/MyService/user

答案 2 :(得分:0)

你的问题有一个确切的答案,但你的腰部。因为如果泽西岛的文件过于模糊,那么这些文件就是在极端相反的方向:由某人在抽象代数中展示他们的博士学位,它在我看来。

所有内容的答案都在JAX-RS规范中,其中Jersey是实现。你可以下载它here as PDF(在你签下你的灵魂之后)

对于如何选择其中一种方法而不是另一种方法的具体答案,对我来说太详细了,无法在此处粘贴,但它位于“ 3.7.2请求匹配”部分

我甚至不会尝试粘贴用于设置匹配请求的潜在方法列表的数学规则,然后从中选择。没有机会在SO中可读取格式化。

对于更一般的问题,“ 3.3资源方法”部分更易于访问。以下是一些选择摘录:

  

3.3资源方法

     

...   JAX-RS定义了一组   常见HTTP方法的请求方法指示符:@GET,@ POST,   @ PUT,@ DELETE,@ HEAD和@OPTIONS。   ...

     

3.3.1可见性:只有公共方法可以作为资源方法公开。   ...

     

3.3.2参数:资源方法最多只能有一个实体参数......

     

3.3.3返回类型:资源方法可以返回void,Response,GenericEntity或其他Java类型......

等等