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

问题描述 投票:1回答:2

我正在尝试制作两种类型的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"
    }
]
post jersey jax-rs
2个回答
2
投票

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


0
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.