Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Jersey jax rs客户端代理不';做文章时不要反对_Java_Json_Rest_Jersey 2.0_Jersey Client - Fatal编程技术网

Java Jersey jax rs客户端代理不';做文章时不要反对

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

我试图使用jersey客户端代理向端点发送POST,但是我发送的对象没有被封送到json中

界面如下所示:

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。