我正在寻找使用jersey客户端(使用apache http client 4.x)执行POST请求的正确方法
由于Client实例和WebResource实例是线程安全的,编码方法的自然方式是:
public AuthorizedAccount createAuthTokenFromUserPass(Credentials credentials)
throws AuthenticationServiceClientException {
ClientResponse response = resource.accept("application/x-protobuf").post(
ClientResponse.class, credentials);
return getAuthorizedAccountFromResponse(response);
}
ClientResponse实例已正确发布。
当从多个线程执行此方法时,它会通过将相同的凭据实例POST到服务器来为每个线程结束。
解决方案是同步方法,但最终会按顺序执行POST。
有不同的方法吗? (避免重新创建Client实例)
答案 0 :(得分:0)
在花了很多时间试图弄清楚什么不能正常工作之后,我发现这个问题不是真的在泽西客户端实现中,而是在我自己的代码中。我使用了MessageBodyWriter的自定义实现,我不够小心。我没有正确阅读界面的合同。我在调用getSize()和writeTo()之间共享了一个实例变量,并且重用了MassageBodyWriter。