Optimize Request#extras, fix #1148.

master
Sutra Zhou 2024-03-03 18:33:00 +08:00
parent 7ededbea1a
commit 95d1f44150
2 changed files with 39 additions and 13 deletions

View File

@ -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;
}

View File

@ -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");
}
}