作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我用 Java 开发了一个网络服务。下面是它的一个方法。
@Path("/setup")
public class SetupJSONService {
@POST
@Path("/insertSetup")
@Consumes(MediaType.APPLICATION_JSON)
public String insertSetup(SetupBean bean)
{
System.out.println("Printed");
SetupInterface setupInterface = new SetupImpl();
String insertSetup = setupInterface.insertSetup(bean);
return insertSetup;
}
}
下面是我如何在我的计算机上使用 Java Jersey
调用此方法。
Client client = ClientBuilder.newClient();
WebTarget target = client.target("http://localhost:8080/TestApp/rest/setup").path("/insertSetup");
SetupBean setupBean = new SetupBean();
setupBean.setIdPatient(1);
setupBean.setCircleType(1);
target.request(MediaType.APPLICATION_JSON_TYPE).post(Entity.entity(setupBean, MediaType.APPLICATION_JSON_TYPE));
但是,现在这个方法也应该在 Android 中调用,但我不确定该怎么做。我知道如何在 android 中进行 GET
调用,如下所示。
public static String httpGet(String urlStr) throws IOException {
URL url = new URL(urlStr);
HttpURLConnection conn =
(HttpURLConnection) url.openConnection();
if (conn.getResponseCode() != 200) {
throw new IOException(conn.getResponseMessage());
}
// Buffer the result into a string
BufferedReader rd = new BufferedReader(
new InputStreamReader(conn.getInputStream()));
StringBuilder sb = new StringBuilder();
String line;
while ((line = rd.readLine()) != null) {
sb.append(line);
}
rd.close();
conn.disconnect();
return sb.toString();
}
但由于我的方法是 POST
并且因为它接受 Java Bean
并且它返回一个 String
,我该如何处理它安卓?对在 android 中使用 Jersey 不感兴趣,因为它在 Android 环境中确实有不好的评论。
最佳答案
Android 提供了一种方法来做你想做的事,但这不是一种高效的方法,我喜欢使用 retrofit 2 来插入我的开发并编写更好的代码。
这里有一个改造 2 的例子,可以帮助你=):
在build.gradle中加入你的依赖
dependencies {
compile 'com.google.code.gson:gson:2.6.2'
compile 'com.squareup.retrofit2:retrofit:2.0.2'
compile 'com.squareup.retrofit2:converter-gson:2.0.2'
}
创建指定转换器和基本 url 的改造构建器。
public static final String URL = "http://localhost:8080/TestApp/rest/";
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(URL)
.addConverterFactory(GsonConverterFactory.create())
.build();
现在创建一个接口(interface)来封装您的其余方法,如下所示
public interface YourEndpoints {
@POST("setup/insertSetup")
Call<ResponseBody> insertSetup(@Body SetupBean setupBean);
}
将您的端点接口(interface)与您的改造实例相关联。
YourEndpoints request = retrofit.create(YourEndpoints.class);
Call<ResponseBody> yourResult = request.insertSetup(YourSetupBeanObject);
yourResult.enqueue(new Callback<ResponseBody>() {
@Override
public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
//response.code()
//your string response response.body().string()
}
@Override
public void onFailure(Throwable t) {
//do what you have to do if it return a error
}
});
有关更多信息,请参阅此链接:
http://square.github.io/retrofit/
https://github.com/codepath/android_guides/wiki/Consuming-APIs-with-Retrofit
关于java - 如何在 Android 中调用 `POST` RESTfull 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37678254/
我是一名优秀的程序员,十分优秀!