我已经将我的其余网络服务代码设置为像这样启动服务器:
static final String BASE_URI = "http://10.236.51.14:9000/abcd/";
public static void main(String[] args) {
try {
HttpServer server = HttpServerFactory.create(BASE_URI);
server.start();
System.out.println("Press Enter to stop the server. ");
System.in.read();
server.stop(0);
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
在其余的Web服务中,我已经制作了一个基本代码来接收2个参数并显示它们的总和:
@GET
@Path("/add/{a}/{b}")
@Produces(MediaType.TEXT_XML)
public String add(@PathParam("a") double a, @PathParam("b") double b) {
return "<?xml version=\"1.0\"?>" + "<result>" + (a + b) + "</result>";
}
我想将我的Android应用程序中的Json数据(图像)发送到此Web服务,但我不知道如何在Web服务中接收它并显示它。 这是我的Android应用程序的代码。在这里我使用Base64将位图转换为字符串。我该如何将其发送到我的网络服务?
ByteArrayOutputStream baos = new ByteArrayOutputStream();
mybitmap.compress(Bitmap.CompressFormat.PNG, 100, baos);
byte[] b = baos.toByteArray();
String strBitMap = Base64.encodeToString(b, Base64.DEFAULT);
任何帮助将不胜感激:) 我搜索了很多,但无法找到适合我的webservice的代码来接收和显示json数据。我也在努力将这个base64字符串以json的形式发送到web服务。 请帮帮我。 最好的问候:)
答案 0 :(得分:0)
我有一个问题:您的示例WebService是否有效?我指的是有两个论点的人。如果您在浏览器中拨打http://10.236.51.14:9000/abcd/add/1/2
,它是否正确显示3?如果没有,您应该有一个包含REST接口的ApplicationConfig。这些应该作为资源类添加,例如:
@ApplicationPath("api")
public class ApplicationConfig extends Application {
@Override
public Set<Class<?>> getClasses() {
Set<Class<?>> resources = new HashSet<>();
resources.addAll(addServiceClasses());
resources.addAll(addFilterClasses());
return resources;
}
private Set<Class<?>> addServiceClasses() {
// add all your REST-classes here
Set<Class<?>> resources = new HashSet<>();
resources.add(YourCalculatorRestServiceClass.class);
resources.add(YourImageConsumingRestServiceClass.class);
return resources;
}
private Set<Class<?>> addFilterClasses() {
// add all your filter classes here (if you have any)
Set<Class<?>> resources = new HashSet<>();
resources.add(YourAuthenticationFilterClass.class);
resources.add(OtherFilterClass.class);
return resources;
}
@Override
public Map<String, Object> getProperties() {
Map<String, Object> properties = new HashMap<>();
// in Jersey WADL generation is enabled by default, but we don't
// want to expose too much information about our apis.
// therefore we want to disable wadl (http://localhost:8080/service/application.wadl should return http 404)
// see https://jersey.java.net/nonav/documentation/latest/user-guide.html#d0e9020 for details
properties.put("jersey.config.server.wadl.disableWadl", true);
// we could also use something like this instead of adding each of our resources
// explicitly in getClasses():
// properties.put("jersey.config.server.provider.packages", "com.nabisoft.tutorials.mavenstruts.service");
return properties;
}
}
这应该成交,你应该可以致电http://10.236.51.14:9000/abcd/api/add/1/2
。 ApplicationConfig使用@Path("api")
进行注释。这意味着在此配置中注册的所有类都具有根路径http://your.server.address/api/
。
现在你的问题。我假设您的服务器正常运行,您可以通过浏览器访问显示结果3的Webservice /add/1/2
。
现在您需要另一项服务来监听POST
。我已将您已准备好的String
作为发布的内容。
@Path("image")
public class ImageReceiverRestService {
@POST
public Response checkAssignable(String base64ImageString) {
// code here working with the base64ImageString
// response code according to whatever happened during your algorithm
return Response.ok().build();
}
}
有关适当的HTTP响应代码,请参阅此Wikipedia文章,以获得快速概述HTTP Status Codes
所以现在你需要在你的Android应用程序上使用相应的客户端。例如:
public class ImageSendingRestClient {
private final static String SERVER_BASE_URI = "http://10.236.51.14:9000/abcd/api/";
private final static String API_ADDRESS = "image/";
public ImageSendingRestClient() {
}
@Override
public void sendImageStringForProcessing(String base64ImageString) throws Exception {
Entity<String> entity = Entity.json(base64ImageString);
Response response = ClientBuilder.newClient()
.target(SERVER_BASE_URI)
.path(API_ADDRESS)
.request()
.post(entity);
try {
if (response.getStatus() == Response.Status.OK.getStatusCode()) {
return;
}
if (response.getStatus() == Response.Status.NOT_FOUND.getStatusCode()) {
throw new Exception;
}
} finally {
response.close();
}
}
}
所需的所有依赖项都是JAX-RS实现,如JAX-RS reference implementation Jersey。也许您还应该查看泽西岛指南中的许多示例,提供您需要的大部分信息Jersey User Guide