我正在为Web服务编写API包装器,并且方法如下所示:
public void login(String username, String password) {
HashMap<String, Object> params = new HashMap<String, Object>();
params.put("username", username);
params.put("password", password);
makeRequest("/user/login", "POST", params);
}
这有效,但有没有更简洁/更清晰的方式用Java编写这个?例如,每次不需要<String, Object>
的不同集合或内联方式(在Javascript中我将编写makeRequest("/user/login", "POST", {"username": username, "password": password});
)。我有一种感觉,Java需要你像这样更冗长,但我想早点发现而不是更晚。
答案 0 :(得分:1)
你的方法已经足够好了。我想不出任何不那么冗长的东西。当然你不能像JS那样创建动态对象。
答案 1 :(得分:1)
当然,您可以先实现自己的方法makeRequest(),该方法接受其他格式的参数。实际上makeRequest()不是JDK的一部分。它是一些其他自定义库(您的或第三方)。有人决定以这种方式实施它。您可以使用其他库或实现自己的包装器:
makeRequest(String url, String method, String[] paramNames, String[] paramValues);
答案 2 :(得分:0)
您可以尝试实施可以像这样使用的fluent API:
HTTP.request("/user/login").method(Method.POST).param("username", username).param("password", password).execute();
取决于您解释“详细程度”的人,它可能会或者可能不会更详细,但至少您可以轻松地链接这些方法并且可以阅读它们。
您可以通过使request()
方法返回具有method()
方法,param()
方法和execute()
方法的类型的对象来实现此功能那些(除了最后一个)返回一个相同类型的对象:
public class HTTP {
public static HTTP request(final String URL) { // ... }
public HTTP method(final Method method) { // ... }
public HTTP param(final String name, final String value) { // ... }
public HTTPResult exec() { // ... }
}
答案 3 :(得分:0)
我不推荐这种方法,但它不那么“冗长”
public void login(final String username, final String password) {
makeRequest("/user/login", "POST", new HashMap(){
{
put("username", username);
put("password", password);
}
});
}
答案 4 :(得分:0)
至于我,我总是使用包装对象作为键值对:
public class Param {
private String key;
private String value
// Getters & Setters below
}
public void makeRequest(String uri, String method, Param... params) {
// your code here
}
public void login(String username, String password) {
makeRequest("/user/login", "POST", new Param("username", username), new Param("password", password));
}