gpt4 book ai didi

android - Java jersey RESTful 网络服务请求

转载 作者:太空宇宙 更新时间:2023-11-03 13:01:02 24 4
gpt4 key购买 nike

我一直在学习有关 restful 服务的教程,它运行良好。但是有些事情我还不太明白。这是它的样子:

@Path("/hello")
public class Hello {

// This method is called if TEXT_PLAIN is request
@GET
@Produces( MediaType.TEXT_PLAIN )
public String sayPlainTextHello()
{
return "Plain hello!";
}

@GET
@Produces( MediaType.APPLICATION_JSON )
public String sayJsonTextHello()
{
return "Json hello!";
}

// This method is called if XML is request
@GET
@Produces(MediaType.TEXT_XML)
public String sayXMLHello() {
return "<?xml version=\"1.0\"?>" + "<hello> Hello Jersey" + "</hello>";
}

// This method is called if HTML is request
@GET
@Produces(MediaType.TEXT_HTML)
public String sayHtmlHello()
{
return "<html> " + "<title>" + "Hello fittemil" + "</title>"
+ "<body><h1>" + "Hello!" + "</body></h1>" + "</html> ";
}
}

困扰我的是我无法使用正确的操作。当我从浏览器请求服务时,会调用适当的 sayHtmlHello() 方法。但现在我正在开发一个 android 应用程序,我想在 Json 中获得结果。但是当我从应用程序调用服务时,会调用 MediaType.TEXT_PLAIN 方法。我的 android 代码看起来与此类似:

Make an HTTP request with android

如何从我的 android 应用程序调用使用 MediaType.APPLICATION_JSON 的方法?此外,我想让那个特定的方法返回一个对象,如果我在那里也能得到一些指导,那就太好了。

最佳答案

我有使用 Jersey 在 java (JAX-RS) 中实现 REST 的个人经验。然后我通过 Android 应用程序连接到这个 RESTful Web 服务。

在您的 Android 应用程序中,您可以使用 HTTP 客户端库。它支持 HTTP 命令,如 POST、PUT、DELETE、GET。例如使用 GET 命令并以 JSON 格式或 TextPlain 传输数据:

public class Client {

private String server;

public Client(String server) {
this.server = server;
}

private String getBase() {
return server;
}

public String getBaseURI(String str) {
String result = "";
try {
HttpParams httpParameters = new BasicHttpParams();
int timeoutConnection = 3000;
HttpConnectionParams.setConnectionTimeout(httpParameters, timeoutConnection);
int timeoutSocket = 5000;
HttpConnectionParams.setSoTimeout(httpParameters, timeoutSocket);
DefaultHttpClient httpClient = new DefaultHttpClient(httpParameters);
HttpGet getRequest = new HttpGet(getBase() + str);
getRequest.addHeader("accept", "application/json");
HttpResponse response = httpClient.execute(getRequest);
result = getResult(response).toString();
httpClient.getConnectionManager().shutdown();
} catch (Exception e) {
System.out.println(e.getMessage());
}
return result;
}

public String getBaseURIText(String str) {
String result = "";
try {
HttpParams httpParameters = new BasicHttpParams();
int timeoutConnection = 3000;
HttpConnectionParams.setConnectionTimeout(httpParameters, timeoutConnection);
int timeoutSocket = 5000;
HttpConnectionParams.setSoTimeout(httpParameters, timeoutSocket);
DefaultHttpClient httpClient = new DefaultHttpClient(httpParameters);
HttpGet getRequest = new HttpGet(getBase() + str);
getRequest.addHeader("accept", "text/plain");
HttpResponse response = httpClient.execute(getRequest);
result = getResult(response).toString();
httpClient.getConnectionManager().shutdown();
} catch (Exception e) {
System.out.println(e.getMessage());
}
return result;
}

private StringBuilder getResult(HttpResponse response) throws IllegalStateException, IOException {
StringBuilder result = new StringBuilder();
BufferedReader br = new BufferedReader(new InputStreamReader((response.getEntity().getContent())), 1024);
String output;
while ((output = br.readLine()) != null)
result.append(output);

return result;
}
}

然后在 android 类中你可以:

Client client = new Client("http://localhost:6577/Example/rest/");
String str = client.getBaseURI("Example"); // Json format

解析 JSON 字符串(或者可能是 xml)并在 ListView、GridView 和...中使用它

我快速浏览了您提供的链接。那里有一个很好的观点。对于 API 级别 11 或更高级别,您需要在单独的线程上实现网络连接。查看此链接:HTTP Client API level 11 or greater in Android .

这是我在 Client 类中使用 HTTP 发布对象的方式:

public String postBaseURI(String str, String strUrl) {
String result = "";
try {
HttpParams httpParameters = new BasicHttpParams();
int timeoutConnection = 3000;
HttpConnectionParams.setConnectionTimeout(httpParameters, timeoutConnection);
int timeoutSocket = 5000;
HttpConnectionParams.setSoTimeout(httpParameters, timeoutSocket);
DefaultHttpClient httpClient = new DefaultHttpClient(httpParameters);
HttpPost postRequest = new HttpPost(getBase() + strUrl);
StringEntity input = new StringEntity(str);
input.setContentType("application/json");
postRequest.setEntity(input);
HttpResponse response = httpClient.execute(postRequest);
result = getResult(response).toString();
httpClient.getConnectionManager().shutdown();
} catch (Exception e) {
System.out.println(e.getMessage());
}
return result;
}

然后在 REST WS 中,我将对象发布到数据库:

    @POST
@Path("/post")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.TEXT_PLAIN)
public Response addTask(Task task) {
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();
session.save(task);
session.getTransaction().commit();
return Response.status(Response.Status.CREATED).build();
}

关于android - Java jersey RESTful 网络服务请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11479746/

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