我现在有一个简单的REST API正在运行。我还有一个移动应用程序(Android),可以准备进行一些网络通信。但问题在于:
我现在使用 Spring 创建了一个花哨的API,可以使用Http-Requests:
package com.helloworld
@Controller
@RequestMapping("/helloWorld")
public class HelloWorldController {
@RequestMapping(value = "/hello", method = RequestMethod.GET)
public String hello(ModelMap model) {
model.addAttribute("msg", "JCG Hello World!");
return "helloWorld";
}
}
这都很好,但我该如何在我的Android移动应用程序中使用此API?我的意思是,我不知道如何更优雅和简单地进行这些调用!我不想为每个API请求编写像这样的内容:
class HelloWorldTask extends AsyncTask<String, String, String> {
private String url = "http://192.168.42.229:8080/HelloWorldExample/helloWorld/displayMessage/" + msg;
@Override
protected String doInBackground(String... uri) {
String msg = "";
for(String m : uri) { msg += m; }
RestTemplate restTemplate = new RestTemplate();
restTemplate.getMessageConverters().add(new StringHttpMessageConverter());
return restTemplate.getForObject(url, String.class, "Android");
}
}
有没有什么方法可以避免这种情况?说实话,我曾经相信在构建REST API项目后只需导入类似于helloworld-api.jar
的东西,然后像这样做:
import com.helloworld
public void getServerHello() {
HelloWorldController api;
HelloWorld helloWorld = api.getHelloWorldMapping();
helloWorld.displayMessage("How are you?");
}
这将是最终结果。在编写Spring REST API时,是否有一种方法可以像这样做,还是我真的必须使用类似于URI构建器的东西,并自己创建所有类型请求的附加“class Task extends AsyncTask”?由于API已经明确定义,应该可以做到这一点,但真的吗?希望我的问题很清楚-如果不清楚,请告诉我。
displayMessage()
应该基本上只是运行类似于HelloWorldTask.execute()
的东西。我不想自己编写这个,因为我认为应该有一种从定义良好的 REST API 中提取“客户端接口库”之类的方式,以便我可以轻松使用。对于我的用例:我需要一个处理移动应用程序客户端并提供 Web 接口的服务器。我不知道 REST 是否真的是我最好的选择,但它是否错误? - Stefan Falk