Optimize Request#extras, fix #1148.
parent
7ededbea1a
commit
95d1f44150
|
@ -1,13 +1,14 @@
|
|||
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.model.HttpRequestBody;
|
||||
import us.codecraft.webmagic.utils.Experimental;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* Object contains url to crawl.<br>
|
||||
* It contains some additional information.<br>
|
||||
|
@ -35,7 +36,7 @@ public class Request implements Serializable {
|
|||
/**
|
||||
* 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
|
||||
|
@ -93,9 +94,6 @@ public class Request implements Serializable {
|
|||
}
|
||||
|
||||
public <T> Request putExtra(String key, T value) {
|
||||
if (extras == null) {
|
||||
extras = new HashMap<String, Object>();
|
||||
}
|
||||
extras.put(key, value);
|
||||
return this;
|
||||
}
|
||||
|
@ -105,11 +103,11 @@ public class Request implements Serializable {
|
|||
}
|
||||
|
||||
public Map<String, Object> getExtras() {
|
||||
return extras;
|
||||
return Collections.unmodifiableMap(extras);
|
||||
}
|
||||
|
||||
public Request setExtras(Map<String, Object> extras) {
|
||||
this.extras = extras;
|
||||
this.extras.putAll(extras);
|
||||
return this;
|
||||
}
|
||||
|
||||
|
|
|
@ -1,10 +1,14 @@
|
|||
package us.codecraft.webmagic;
|
||||
|
||||
import org.junit.Test;
|
||||
import us.codecraft.webmagic.utils.HttpConstant;
|
||||
|
||||
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
|
||||
* Date: 17/3/11
|
||||
|
@ -22,4 +26,28 @@ public class RequestTest {
|
|||
assertThat(requestA).isNotEqualTo(requestB);
|
||||
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