From c7005a0227e26047030a89929e83a2c734b9dec9 Mon Sep 17 00:00:00 2001 From: "yihua.huang" Date: Tue, 6 Aug 2013 22:36:37 +0800 Subject: [PATCH] json fix --- .../src/main/java/us/codecraft/webmagic/Request.java | 11 +++++++++++ .../codecraft/webmagic/scheduler/RedisScheduler.java | 8 ++++---- .../webmagic/scheduler/RedisSchedulerTest.java | 6 ++++-- 3 files changed, 19 insertions(+), 6 deletions(-) diff --git a/webmagic-core/src/main/java/us/codecraft/webmagic/Request.java b/webmagic-core/src/main/java/us/codecraft/webmagic/Request.java index 6cf344f..905dbe5 100644 --- a/webmagic-core/src/main/java/us/codecraft/webmagic/Request.java +++ b/webmagic-core/src/main/java/us/codecraft/webmagic/Request.java @@ -40,6 +40,9 @@ public class Request implements Serializable { private double priority; + public Request() { + } + /** * 构建一个request对象 * @@ -102,4 +105,12 @@ public class Request implements Serializable { public int hashCode() { return url.hashCode(); } + + public void setExtras(Map extras) { + this.extras = extras; + } + + public void setUrl(String url) { + this.url = url; + } } diff --git a/webmagic-plugin/webmagic-misc/src/main/java/us/codecraft/webmagic/scheduler/RedisScheduler.java b/webmagic-plugin/webmagic-misc/src/main/java/us/codecraft/webmagic/scheduler/RedisScheduler.java index 8233698..c9992db 100644 --- a/webmagic-plugin/webmagic-misc/src/main/java/us/codecraft/webmagic/scheduler/RedisScheduler.java +++ b/webmagic-plugin/webmagic-misc/src/main/java/us/codecraft/webmagic/scheduler/RedisScheduler.java @@ -40,8 +40,8 @@ public class RedisScheduler implements Scheduler { jedis.zadd(SET_PREFIX + task.getUUID(), request.getPriority(), request.getUrl()); if (request.getExtras() != null) { String key = ITEM_PREFIX + DigestUtils.shaHex(request.getUrl()); - byte[] serialize = JSON.toJSONBytes(request); - jedis.set(key.getBytes(), serialize); + byte[] bytes = JSON.toJSONString(request).getBytes(); + jedis.set(key.getBytes(), bytes); } } pool.returnResource(jedis); @@ -57,8 +57,8 @@ public class RedisScheduler implements Scheduler { String key = ITEM_PREFIX + DigestUtils.shaHex(url); byte[] bytes = jedis.get(key.getBytes()); if (bytes != null) { - Object o = JSON.parse(bytes); - return (Request) o; + Request o = JSON.parseObject(new String(bytes),Request.class); + return o; } pool.returnResource(jedis); return new Request(url); diff --git a/webmagic-plugin/webmagic-misc/src/test/java/us/codecraft/webmagic/scheduler/RedisSchedulerTest.java b/webmagic-plugin/webmagic-misc/src/test/java/us/codecraft/webmagic/scheduler/RedisSchedulerTest.java index 3d59671..144dba5 100644 --- a/webmagic-plugin/webmagic-misc/src/test/java/us/codecraft/webmagic/scheduler/RedisSchedulerTest.java +++ b/webmagic-plugin/webmagic-misc/src/test/java/us/codecraft/webmagic/scheduler/RedisSchedulerTest.java @@ -1,7 +1,6 @@ package us.codecraft.webmagic.scheduler; import org.junit.Before; -import org.junit.Ignore; import org.junit.Test; import us.codecraft.webmagic.Request; import us.codecraft.webmagic.Site; @@ -35,8 +34,11 @@ public class RedisSchedulerTest { return null; } }; - redisScheduler.push(new Request("http://www.ibm.com/developerworks/cn/java/j-javadev2-22/"), task); + Request request = new Request("http://www.ibm.com/developerworks/cn/java/j-javadev2-22/"); + request.putExtra("1","2"); + redisScheduler.push(request, task); Request poll = redisScheduler.poll(task); + System.out.println(poll); } }