用于人员搜索的 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 的 EqualsBuilder
、HashCodeBuilder
等。
有关更理论的解释,请查看 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/