Java Jersey jax rs客户端代理不';做文章时不要反对
我试图使用jersey客户端代理向端点发送POST,但是我发送的对象没有被封送到json中 界面如下所示:Java Jersey jax rs客户端代理不';做文章时不要反对,java,json,rest,jersey-2.0,jersey-client,Java,Json,Rest,Jersey 2.0,Jersey Client,我试图使用jersey客户端代理向端点发送POST,但是我发送的对象没有被封送到json中 界面如下所示: public interface Authentication { @POST @Path("principal") @Produces(MediaType.APPLICATION_JSON) @Consumes(MediaType.APPLICATION_JSON) ApiPrincipal principal(@BeanParam ApiAuthenticationRequest a
public interface Authentication {
@POST
@Path("principal")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
ApiPrincipal principal(@BeanParam ApiAuthenticationRequest authRequest, @HeaderParam("x-forwarded-for") String forwardedFor, @Context HttpServletRequest request) throws UserError;
}
ClientConfig cc = new ClientConfig()
.register(JacksonFeature.class)
.register(new Authenticator(remoteUser, password));
Client resource = ClientBuilder.newClient(cc);
Authentication a = WebResourceFactory.newResource(Authentication.class,
resource.target(scheme + "://" + remoteHost + ":" + port + "/app/api/authentication/v-1/"));
ApiAuthenticationRequest authRequest = new ApiAuthenticationRequest();
authRequest.username = username;
authRequest.remoteIp = "localhost";
a.principal(authRequest, null, null);
客户端代码如下所示:
public interface Authentication {
@POST
@Path("principal")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
ApiPrincipal principal(@BeanParam ApiAuthenticationRequest authRequest, @HeaderParam("x-forwarded-for") String forwardedFor, @Context HttpServletRequest request) throws UserError;
}
ClientConfig cc = new ClientConfig()
.register(JacksonFeature.class)
.register(new Authenticator(remoteUser, password));
Client resource = ClientBuilder.newClient(cc);
Authentication a = WebResourceFactory.newResource(Authentication.class,
resource.target(scheme + "://" + remoteHost + ":" + port + "/app/api/authentication/v-1/"));
ApiAuthenticationRequest authRequest = new ApiAuthenticationRequest();
authRequest.username = username;
authRequest.remoteIp = "localhost";
a.principal(authRequest, null, null);
如果我在wireshark中查看请求,一切看起来都很好,只是它没有主体
我的依赖项如下(jersey版本2.22.1):
org.glassfish.jersey.containers
jersey容器servlet核心
org.glassfish.jersey.media
泽西岛媒体多部分
org.glassfish.jersey.ext
泽西代理客户端
com.fasterxml.jackson.jaxrs
jackson jaxrs json提供程序
2.6.4
com.fasterxml.jackson.core
杰克逊注释
2.6.4
org.glassfish.jersey.media
泽西媒体公司
org.glassfish.jersey.ext
泽西-斯普林3
你应该做的第一件事就是摆脱@BeanParam
。但是,这不应该影响正在发送的数据。除此之外,不确定您做错了什么。你可以看看这个。看看你是否可以在它的基础上尝试重现你的问题。也许你可以缩小范围cause@peeskillet谢谢你的例子,它对我来说也很好,但是如果我将上下文HttpServletRequest请求添加到它中断的接口,请看这里,我会将其报告为Jersey bug。另一个数据点是,如果我翻转模型和HttpServletRequest的顺序,它就会开始工作。是的,两方面你都是对的。古怪的也似乎与问题无关,但这是在servlet环境中部署测试的正确方法。以前的版本总是会给您一个空的servlet请求,因为它没有配置为servlet env。