gpt4 book ai didi

java - JAX-RS发送序列化对象

转载 作者:行者123 更新时间:2023-12-02 05:52:29 24 4
gpt4 key购买 nike

作为旨在发送 xml 或 JSON 类型数据的 REST 服务,

@Consumes({MediaType.APPLICATION_JSON})
@Produces({MediaType.APPLICATION_JSON})

This搜索结果 将自定义对象详细说明为 JSON,然后传输它。如果不这样做,

有人可以告诉我,有没有一种方法可以直接发送序列化对象?任何资源、代码片段都说明了 JAX-RS 如何发送序列化对象?

最佳答案

是的,这确实有效。我对我的 Android 应用程序使用了相同的方法。您可以只使用对象输入/输出流。

不幸的是,我无法提供任何代码 atm,因为我正在工作,并且代码在我的家用电脑上;)我稍后会更新这篇文章并为您提供一个示例 =)

所以我终于找到了一些时间:

这是服务器端的代码。它接收一个登录字符串,并返回一个 boolean 值和一个字符串:

@POST
@Path("/login/{id}")
@Consumes("application/xml")
public StreamingOutput login(@PathParam("id") int id, InputStream is) {
String login[] = null;
ObjectInputStream ois = null;
try {
ois = new ObjectInputStream(is);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
login = (String[]) ois.readObject();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
this.login[0] = login[0];
this.login[1] = login[1];
return new StreamingOutput() {
public void write(OutputStream outputStream) throws IOException,
WebApplicationException {
login(outputStream);
}
};
}
public void login(OutputStream os) {
boolean result = false;
connect();
ResultSet rs = null;
try {
PreparedStatement ps = dbconn
.prepareStatement("Select password from supervisor where username = '"
+ login[0] + "'");
rs = ps.executeQuery();
rs.next();
String password = rs.getString("password");
login[0] = password;
if (login[1].equals(password)) {
result = true;
}
} catch (SQLException e) {
login[0] = e.toString();
}
try {
ObjectOutputStream oos = new ObjectOutputStream(os);
oos.writeObject(result);
oos.writeObject(login);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

现在这是我为我的设备编写的代码:

ObjectOutputStream oos = null;
String[] login = { "xxxxxxxx", "xxxxxxxx" };
URL url = new URL(
"http://xxxxxxx.xxxxxxxxx.xxxxxxxxxxx.com/xxxxx/login/1");
try {
// creates a HTTP connection
HttpURLConnection httpConn = (HttpURLConnection) url
.openConnection();
// httpConn.setUseCaches(false);
httpConn.setReadTimeout(10000 /* milliseconds */);
httpConn.setConnectTimeout(15000 /* milliseconds */);
httpConn.setDoOutput(true);
httpConn.setDoInput(true);
httpConn.setRequestMethod("POST");
httpConn.setRequestProperty("Content-Type", "application/xml");
httpConn.connect();
OutputStream outputStream = httpConn.getOutputStream();
oos = new ObjectOutputStream(outputStream);
oos.writeObject(login);
outputStream.close();
InputStream is = httpConn.getInputStream();
ObjectInputStream ois = new ObjectInputStream(is);
try {
boolean check = (boolean) ois.readObject();
String[] logback = (String[]) ois.readObject();
System.out.println(check + " " + logback[0] + " " + logback[1]);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println();
} finally {
if (oos != null) {
oos.close();
}
}

现在这一切看起来有点复杂,但这是从一个较长的项目上下文中得出的。我希望它仍然可以帮助您实现您想要的!

抱歉这么晚了。

关于java - JAX-RS发送序列化对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23421967/

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