gpt4 book ai didi

java - 如何通过 Jersey 休息客户端发布列表

转载 作者:行者123 更新时间:2023-12-01 09:53:03 24 4
gpt4 key购买 nike

我有以下域类

public class Team {
private String name;

// getters and setters
]

我有以下服务端点

@Path("team")
public class TeamEndpoint {
@Post
@Path("registerAll")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.TEXT_PLAIN)
public String register(List<Team> teams) {
// do something
return "Fine";
}

@Post
@Path("register")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.TEXT_PLAIN)
public String register(Team team) {
// do something
return "Fine";
}
}

当我现在尝试使用 Jersey Client (2.23) 时,我可以使用 Entity.json(new Team())发布到接受一个元素的方法 - 并且一切都按预期工作

但是当我调用registerAll时与 Entity.json(Arrays.asList(new Team())我明白

java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at org.codehaus.mojo.exec.ExecJavaMojo$1.run(ExecJavaMojo.java:297)
at java.lang.Thread.run(Thread.java:745)
Caused by: javax.ws.rs.BadRequestException: HTTP 400 Bad Request
at org.glassfish.jersey.client.JerseyInvocation.convertToException(JerseyInvocation.java:1011)
at org.glassfish.jersey.client.JerseyInvocation.translate(JerseyInvocation.java:819)
at org.glassfish.jersey.client.JerseyInvocation.access$700(JerseyInvocation.java:92)
at org.glassfish.jersey.client.JerseyInvocation$2.call(JerseyInvocation.java:701)
at org.glassfish.jersey.internal.Errors.process(Errors.java:315)
at org.glassfish.jersey.internal.Errors.process(Errors.java:297)
at org.glassfish.jersey.internal.Errors.process(Errors.java:228)
at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:444)
at org.glassfish.jersey.client.JerseyInvocation.invoke(JerseyInvocation.java:697)
at org.glassfish.jersey.client.JerseyInvocation$Builder.method(JerseyInvocation.java:448)
at org.glassfish.jersey.client.JerseyInvocation$Builder.post(JerseyInvocation.java:349)

如何通过 Jersey 客户端发布对象列表?

====编辑====

Jersey 客户端代码如下所示

private static String postList(List<Team> data) {       
return ClientBuilder.newBuilder().register(JacksonFeature.class).build()
.target("http://server/team/registerAll)
.request(MediaType.APPLICATION_JSON)
.post(Entity.json(data),String.class);
}

我认为这是因为 Entity.json接受T而不是List<T>我预计需要一个 GenericType左右 - 但我找不到任何接受此方法的方法。

最佳答案

我找到了罪魁祸首。

我的域类是由构建器创建的,因此具有私有(private)构造函数。这就引发了问题。提供公共(public)构造函数解决了这个问题。

单个对象示例的工作原理与它实际上在另一个具有公共(public)构造函数的域类上进行测试一样。因为我没有看到其中的联系,所以想在这里简化描述 - 我只显示了一个域类

关于java - 如何通过 Jersey 休息客户端发布列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37483304/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com