干净地传递参数

时间:2011-01-24 12:12:23

标签: java

我正在为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需要你像这样更冗长,但我想早点发现而不是更晚。

5 个答案:

答案 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));
}