Optimize Request#extras, fix #1148.
parent
7ededbea1a
commit
95d1f44150
|
@ -1,13 +1,14 @@
|
||||||
package us.codecraft.webmagic;
|
package us.codecraft.webmagic;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
import us.codecraft.webmagic.downloader.Downloader;
|
import us.codecraft.webmagic.downloader.Downloader;
|
||||||
import us.codecraft.webmagic.model.HttpRequestBody;
|
import us.codecraft.webmagic.model.HttpRequestBody;
|
||||||
import us.codecraft.webmagic.utils.Experimental;
|
import us.codecraft.webmagic.utils.Experimental;
|
||||||
|
|
||||||
import java.io.Serializable;
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Object contains url to crawl.<br>
|
* Object contains url to crawl.<br>
|
||||||
* It contains some additional information.<br>
|
* It contains some additional information.<br>
|
||||||
|
@ -35,7 +36,7 @@ public class Request implements Serializable {
|
||||||
/**
|
/**
|
||||||
* Store additional information in extras.
|
* Store additional information in extras.
|
||||||
*/
|
*/
|
||||||
private Map<String, Object> extras;
|
private Map<String, Object> extras = new HashMap<>();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* cookies for current url, if not set use Site's cookies
|
* cookies for current url, if not set use Site's cookies
|
||||||
|
@ -93,9 +94,6 @@ public class Request implements Serializable {
|
||||||
}
|
}
|
||||||
|
|
||||||
public <T> Request putExtra(String key, T value) {
|
public <T> Request putExtra(String key, T value) {
|
||||||
if (extras == null) {
|
|
||||||
extras = new HashMap<String, Object>();
|
|
||||||
}
|
|
||||||
extras.put(key, value);
|
extras.put(key, value);
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
@ -105,11 +103,11 @@ public class Request implements Serializable {
|
||||||
}
|
}
|
||||||
|
|
||||||
public Map<String, Object> getExtras() {
|
public Map<String, Object> getExtras() {
|
||||||
return extras;
|
return Collections.unmodifiableMap(extras);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Request setExtras(Map<String, Object> extras) {
|
public Request setExtras(Map<String, Object> extras) {
|
||||||
this.extras = extras;
|
this.extras.putAll(extras);
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,10 +1,14 @@
|
||||||
package us.codecraft.webmagic;
|
package us.codecraft.webmagic;
|
||||||
|
|
||||||
import org.junit.Test;
|
|
||||||
import us.codecraft.webmagic.utils.HttpConstant;
|
|
||||||
|
|
||||||
import static org.assertj.core.api.Assertions.assertThat;
|
import static org.assertj.core.api.Assertions.assertThat;
|
||||||
|
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
import us.codecraft.webmagic.utils.HttpConstant;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author code4crafter@gmail.com
|
* @author code4crafter@gmail.com
|
||||||
* Date: 17/3/11
|
* Date: 17/3/11
|
||||||
|
@ -22,4 +26,28 @@ public class RequestTest {
|
||||||
assertThat(requestA).isNotEqualTo(requestB);
|
assertThat(requestA).isNotEqualTo(requestB);
|
||||||
assertThat(requestA.hashCode()).isNotEqualTo(requestB.hashCode());
|
assertThat(requestA.hashCode()).isNotEqualTo(requestB.hashCode());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testSetExtras() {
|
||||||
|
Request request = new Request();
|
||||||
|
Map<String, Object> extras = Collections.singletonMap("a", "1");
|
||||||
|
request.setExtras(extras);
|
||||||
|
request.putExtra("b", "2");
|
||||||
|
assertThat(request.<String>getExtra("a")).isEqualTo("1");
|
||||||
|
assertThat(request.<String>getExtra("b")).isEqualTo("2");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testGetExtras() {
|
||||||
|
Request request = new Request();
|
||||||
|
request.putExtra("a", "1");
|
||||||
|
assertThat(request.getExtras()).containsEntry("a", "1");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(expected = UnsupportedOperationException.class)
|
||||||
|
public void testGetExtrasShouldBeUnmodifiable() {
|
||||||
|
Request request = new Request();
|
||||||
|
request.getExtras().put("a", "1");
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue