- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有这个 Jersey 网络资源代码:
@Override
public int Foo(long uId, String secretKey, long tileId) {
int answer = 0;
String ans;
try {
ClientResponse response = webResource
// .path("multi-get")
.queryParam("reqtype", "tileBatch")
.queryParam("protocol", "1")
.queryParam("sessionid", String.valueOf(uId))
.queryParam("cookie", String.valueOf(secretKey))
.queryParam("num", "1")
.queryParam("t0", String.valueOf(tileId))
.queryParam("v0", "0")
.get(ClientResponse.class);
if (response.getStatus() != 200) {
throw new RuntimeException("Failed : HTTP error code : "
+ response.getStatus());
}
String output = response.getEntity(String.class);
answer = response.getEntityInputStream().available();
byte[] byteArray = output.getBytes("UTF-8");
ans = new String(byteArray, "UTF-8");
} catch (Exception e) {
e.printStackTrace();
}
return answer;
}
}
我看到 String output = response.getEntity(String.class);
不为空,但在 answer = response.getEntityInputStream().available();
中答案==0
怎么来的?
如果我想将二进制数据的前 2 个字节解析为整数我怎样才能做到这一点? (int) byteArray[0]
?
例如00000000-00010000
编辑
我尝试了这段代码:
InputStream entityInputStream = response.getEntityInputStream();
answer = entityInputStream.available();
String output = response.getEntity(String.class);
byte[] byteArray = new byte[2];
// entityInputStream.reset();
entityInputStream.read(byteArray);
String s = new String(byteArray);
但是即使output
不为空,byteArray == {0,0}
。
output == ....
�*WZDF04x��:w|������6[�!�M���@HH �� �����TQ�W�""$@�Z $(���ұ=��[��� ��d�s�n6K�������{�99��{����$qE48"
我的方法正确吗?
最佳答案
I see
String output = response.getEntity(String.class);
is not empty and yet inanswer = response.getEntityInputStream().available();
thenanswer == 0
how come?
当您执行response.readEntity(String.class)
时,将读取输入流并清除输入流。因此,您下次尝试检索输入流将返回一个空流。
If I want to parse the 2 first bytes from binary data into an integer how can I do this?
您可以简单地将InputStream
包装在DataInputStream
中,并使用DataInputStream.readInt()
。然后,您可以使用 response.readEntity(String.class);
读取输入流的其余部分。您似乎正在尝试读取字符串,然后读取 int,这与您的上述语句不符。
测试
@Path("/string")
public class StringResource {
@GET
public StreamingOutput getString() {
return new StreamingOutput(){
@Override
public void write(OutputStream out)
throws IOException, WebApplicationException {
DataOutputStream outStream = new DataOutputStream(out);
outStream.writeInt(1234567);
outStream.writeUTF("Hello World");
}
};
}
}
@Test
public void testMyResource() throws Exception {
ClientConfig config = new DefaultClientConfig();
Client client = Client.create(config);
WebResource wr = client
.resource("http://localhost:8080/api/string");
ClientResponse response = wr.get(ClientResponse.class);
InputStream is = response.getEntityInputStream();
DataInputStream dis = new DataInputStream(is);
int num = dis.readInt();
System.out.println(num);
System.out.println(response.getEntity(String.class));
response.close();
}
打印出1234567
,然后打印出Hello World
关于java - 为什么我的 Jersey ClientResponse 不为空,但可用返回 0?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27918979/
我正在尝试获取列表的结果,基本上是使用 Jersey RESTful API(服务器和客户端)的实体列表 UserRESTClient client = new UserRESTClient(); C
为什么我需要发布 ClientResponse: response.releaseConnection(); 有优势吗?为什么 RestEasy 不处理这个? 有时我必须释放它,有时我没有 - 这是
我有一个 REST端点为 @GET @Produces(MediaType.APPLICATION_JSON) public Response getVariables(@QueryParam("_a
我正在尝试实现 BodyExtractor 接口(interface),从 Mono 获取主体作为对象,而不是在 Mono 中获取主体。 我找不到 BodyExtractor 实现的任何示例。我想知道
我在使用 jeresy ClientRespone.getEntity 反序列化时遇到问题 我尝试遵循一些教程和问题,包括: http://jersey.576304.n2.nabble.com/Ho
首先,我有一个像这样公开的 REST URL: @PostMapping("/check/existence") @ResponseBody public Map checkExis
我正在尝试在 REST 服务器和调用客户端应用程序之间编写一种代理,以便通过向 REST 调用添加属性来强制隐私。 我不想检查来自服务器的响应,我只想将它传递给客户端。 我想用 spring-webf
如何从 Response.class 中获取资源 URI 路径/位置?当我像这样使用 Apache CXF 客户端 API 调用我的 Restful 服务时: Response res = reso
我觉得我错过了一些东西。我有一个过滤器,可以打印出服务器返回的信息,并且我报告我正在返回正确的响应(403)。我编写了一个 JUnit 测试来验证这个逻辑,很多时候我报告 200 而不是 403。奇怪
我目前正在使用 Resteasy 2.3.6.Final 并想升级到 Resteasy 3.0.4.Final。然而,API doc表示该类现在已弃用。所以我的问题是: ClientResponse
我目前正在使用 Jersey 作为代理 REST api 来调用另一个 RESTful 网络服务。一些调用将在我的服务器中以最少的处理来回传递。 有没有办法干净地做到这一点?我正在考虑使用 Jerse
我有这个 Jersey 网络资源代码: @Override public int Foo(long uId, String secretKey, long tileId) {
我在模拟 com.sun.jersey.api.client.ClientResponse 时遇到了一些问题,但只有在我设置 .type(MediaType.MULTIPART_FORM_DATA_T
我使用 jersey-client 来使用 REST 服务。我需要请求的实体和 Last-Modified header 。 所以我做了以下事情: ClientResponse response =
我正在尝试使用 Jersey 客户端调用 REST 服务(不使用 Jersey/JAX-RS)。以下代码可以很好地发布我的表单数据并接收响应: Form form = new Form();
我正在使用响应式编程的代码库中尝试来自 Spring 5 (5.0.0.RC2) 的新 WebClient,并且我已成功将 JSON 响应从端点映射到我的应用程序中的 DTO,效果非常好: WebCl
我有一个 Web 应用程序,它执行身份验证,然后检查请求中的 cookie 以允许来自同一客户端的后续调用。我写了一段代码,当我从 eclipse 运行它时它工作得很好,但是当从 android 模拟
我有一个基本的java项目,其中我已经在我的java构建中从外部导入了jersey-client-1.19.jar(使用eclipse)。我正在尝试编写一个基本的 Jersey 客户端来对 Web 服
我是 Spring Reactive 框架的新手,并尝试将 Springboot 1.5.x 代码转换为 Springboot 2.0。我需要在 Spring 5 WebClient ClientRe
我正在尝试使用 jersey 客户端通过 Web 服务获取 PreRegisterJsonResponse 对象,方法是将 preRegisterId 作为路径变量发送到服务,并在高级 REST 客户
我是一名优秀的程序员,十分优秀!