Jersey具有相同路径的多个POST方法

时间:2017-07-13 20:07:39

标签: post jersey jax-rs

我正在尝试制作两种类型的POST方法,这两种方法都创建对象并填充数据库。

方法1将单个对象添加到数据库中。

方法2将数组对象添加到数据库中。

// Create new agent status
@POST
@Consumes(MediaType.APPLICATION_JSON)
public Response createAgentStatus(@Context HttpServletRequest request, AgentStatus agentStatus) {
    ...
}


// Create multiple agent statuses at once
@POST
@Consumes(MediaType.APPLICATION_JSON)
public Response createAgentStatuses(@Context HttpServletRequest request, Collection<AgentStatus> agentStatuses) {
    ...
}

我收到了错误,正如预期的那样,因为泽西岛无法区分这两条路径。两个POSTS都被视为与泽西相同,因此无法根据我的输入判断哪一个路由到哪个。

我怎样才能让泽西可以检测我输入的格式并相应地路由?谢谢

例如:

方法1 JSON输入(createAgentStatus):

{
    "agentId":"A123456",
    "agentStatus":"NOTREADY",
    "timeStamp":"2015-10-08T13:37:32:235Z",
    "reason":"Break",
    "reasonCode":"100"
}

方法2 JSON输入(createAgentStatuses):

[
    {
    "agentId":"A123456",
    "agentStatus":"NOTREADY",
    "timeStamp":"2015-10-08T13:37:32:235Z",
    "reason":"Break",
    "reasonCode":"100"
    },
    {
    "agentId":"B654321",
    "agentStatus":"AVAIL",
    "timeStamp":"2015-10-08T13:37:32:235Z",
    "reason":"Call",
    "reasonCode":"200"
    }
]

2 个答案:

答案 0 :(得分:2)

也许您可以使用@QueryParam来确定端点需要哪个选项并调用适当的方法,例如&#34; batch = true&#34;或者你可以有一条路径&#34; / batch&#34;插入多个记录。

答案 1 :(得分:0)

我认为单个端点足以实现此目标。如果我们传入对象列表,则应根据列表的大小创建对象。

在后端,您可以遍历列表以将对象添加到数据库。如果请求列表中只有一个对象,则创建一个对象;如果请求列表中包含多个对象,则创建多个对象。