java - 此 Java 代码的更好模式/设计?

标签 java

用于人员搜索的 LinkedIn rest API 具有以下格式 http://api.linkedin.com/people-search?search-param1=val1&search-param2=val2...

因为我打算在我的应用程序中多次使用这个,所以我尝试创建一个像这样的 Search 对象,我们可以在其中为不同的搜索参数设置值,然后是一个名为 generateQueryUrl 的方法 生成上述格式的 url。

public class Search {
  private String searchParam1;
  private String searchParam2;

  public void setSearchParam1(String val) { this.searchParam1 = val; }
  public void setSearchParam2(String val) { this.searchParam2 = val; }

  //Form the query url
  public String generateQueryUrl(){
    String url = "";  
    if(searchParam1 != null) {
        url += "search-param1=" +  searchParam1 + "&";
    }
    if(searchParam2 != null) {
        url += "search-param2=" +  searchParam2 + "&";
    }
    return url;
 }    

我的问题是,是否有更好的模式/设计来做到这一点?如果有很多参数,检查NULL,然后附加相应的参数名称,值似乎给我增加了冗余代码。

另请告诉我这种方法是否合适。

最佳答案

我认为您正在设计的实际上是一个“构建器”,因为您正在构建将在最后返回的 URL。想想 StringBuilder,或者 Apache 的 EqualsBuilderHashCodeBuilder 等。

有关更理论的解释,请查看 http://sourcemaking.com/design_patterns/builder .

现在,对于您的代码,为了正确构建 URL,我会像您一样使用“set”方法,但在它们内部我会使用 Apache 的 HttpComponents (ex HttpClient)正确附加 URL 的参数。

想一想,如果你在其中一个参数的值中插入一个“&”,你的查询参数将被搞乱,因为你通常必须转义这个字符(而你似乎并没有在这里这样做).我更喜欢让经过测试和已知的 API (UriUtils) 为我做这件事。

因此,使用 Apache 的 HttpComponents,我的类看起来像这样:

public class SearchBuilder {
  private URI baseUri;
  private List<NameValuePair> parameters;

  public SearchBuilder (URI baseUri) {
    this.baseUri= baseUri;
    this.parameters = new ArrayList<NameValuePair>();
  }

  public void addSearchParam1(String val) { 
    if(!StringUtils.isBlank(val)) {
      parameters.add(new BasicNameValuePair("SearchParam1", val));
    }
  }

  //Form the query url
  public URI toURI(){
    URI uri = URIUtils.createURI(baseUri.getScheme(), baseUri.getHost(), baseUri.getPort(), baseUri.getPath(), URLEncodedUtils.format(parameters, "UTF-8"), null);
    return uri;
  }

编辑:我添加了“isBlank”检查以确保带有 null、空的纯空格字符串的参数不会添加到查询中。现在,您可以将其更改为仅检查 null,但我相信您明白了。

关于java - 此 Java 代码的更好模式/设计?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9630411/

相关文章:

java - 尝试启动 Spring Boot 应用程序时获取服务器时区值 'unknown' 错误

java - 如何重置 iText 中的段落

java - Scala 中的库——在 Android 中使用

java - 在 JMX 中设置每用户或每组安全性

java - 套接字异常 : Connection reset while FTP upload

java - 如何在给定 FileReader() 的窗口中调试错误的文件名路径

java - Java Fragment 中的 RecyclerView 与 ViewModel

java - 我希望我的 JTable 与链接列表的大小相同

java - Spring boot 容器应用程序上的 Datadog 检测 - 未找到类

java - 如何使用 Square 的 Retrofit 网络库实现异步回调