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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Jersey具有相同路径的多个POST方法相关的知识,希望对你有一定的参考价值。

我正在尝试制作两种类型的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"
    }
]
答案

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

另一答案

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

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

以上是关于Jersey具有相同路径的多个POST方法的主要内容,如果未能解决你的问题,请参考以下文章

在 TabLayout 和 ViewPager2 中执行异步任务后更新具有相同布局的多个片段

使用具有不同片段字段的相同中继根查询的多个 react-router-relay 路由

在 Jackson/Jersey JAVA 上发布带有多个参数 JSON 和 String 的请求

导航上的片段生命周期重叠

Jersey POST 方法正在接收空值作为参数

jersey rest post 访问为http 405 异常如何解决