Commit 228911b5 authored by Yihua Huang's avatar Yihua Huang Committed by GitHub

Merge pull request #370 from gyk001/master

fixed #301 修复使用注解抽取JSON数据的问题
parents 507556d0 700898fe
...@@ -15,19 +15,19 @@ import java.util.List; ...@@ -15,19 +15,19 @@ import java.util.List;
*/ */
public class GithubRepoApi implements HasKey { public class GithubRepoApi implements HasKey {
@ExtractBy(type = ExtractBy.Type.JsonPath, value = "$.name") @ExtractBy(type = ExtractBy.Type.JsonPath, value = "$.name", source = ExtractBy.Source.RawText)
private String name; private String name;
@ExtractBy(type = ExtractBy.Type.JsonPath, value = "$..owner.login") @ExtractBy(type = ExtractBy.Type.JsonPath, value = "$..owner.login", source = ExtractBy.Source.RawText)
private String author; private String author;
@ExtractBy(type = ExtractBy.Type.JsonPath, value = "$.language",multi = true) @ExtractBy(type = ExtractBy.Type.JsonPath, value = "$.language",multi = true, source = ExtractBy.Source.RawText)
private List<String> language; private List<String> language;
@ExtractBy(type = ExtractBy.Type.JsonPath, value = "$.stargazers_count") @ExtractBy(type = ExtractBy.Type.JsonPath, value = "$.stargazers_count", source = ExtractBy.Source.RawText)
private int star; private int star;
@ExtractBy(type = ExtractBy.Type.JsonPath, value = "$.homepage") @ExtractBy(type = ExtractBy.Type.JsonPath, value = "$.forks_count", source = ExtractBy.Source.RawText)
private int fork; private int fork;
@ExtractByUrl @ExtractByUrl
......
...@@ -17,7 +17,7 @@ class Extractor { ...@@ -17,7 +17,7 @@ class Extractor {
protected final boolean multi; protected final boolean multi;
static enum Source {Html, Url, RawHtml} static enum Source {Html, Url, RawHtml, RawText}
public Extractor(Selector selector, Source source, boolean notNull, boolean multi) { public Extractor(Selector selector, Source source, boolean notNull, boolean multi) {
this.selector = selector; this.selector = selector;
......
...@@ -179,7 +179,24 @@ class PageModelExtractor { ...@@ -179,7 +179,24 @@ class PageModelExtractor {
ExtractBy extractBy = field.getAnnotation(ExtractBy.class); ExtractBy extractBy = field.getAnnotation(ExtractBy.class);
if (extractBy != null) { if (extractBy != null) {
Selector selector = ExtractorUtils.getSelector(extractBy); Selector selector = ExtractorUtils.getSelector(extractBy);
fieldExtractor = new FieldExtractor(field, selector, extractBy.source() == ExtractBy.Source.RawHtml ? FieldExtractor.Source.RawHtml : FieldExtractor.Source.Html,
FieldExtractor.Source source = null;
switch (extractBy.source()){
case RawText:
source = FieldExtractor.Source.RawText;
break;
case RawHtml:
source = FieldExtractor.Source.RawHtml;
break;
case SelectedHtml:
source =FieldExtractor.Source.Html;
break;
default:
source =FieldExtractor.Source.Html;
}
fieldExtractor = new FieldExtractor(field, selector, source,
extractBy.notNull(), extractBy.multi() || List.class.isAssignableFrom(field.getType())); extractBy.notNull(), extractBy.multi() || List.class.isAssignableFrom(field.getType()));
Method setterMethod = getSetterMethod(clazz, field); Method setterMethod = getSetterMethod(clazz, field);
if (setterMethod != null) { if (setterMethod != null) {
...@@ -284,6 +301,9 @@ class PageModelExtractor { ...@@ -284,6 +301,9 @@ class PageModelExtractor {
case Url: case Url:
value = fieldExtractor.getSelector().selectList(page.getUrl().toString()); value = fieldExtractor.getSelector().selectList(page.getUrl().toString());
break; break;
case RawText:
value = fieldExtractor.getSelector().selectList(page.getRawText());
break;
default: default:
value = fieldExtractor.getSelector().selectList(html); value = fieldExtractor.getSelector().selectList(html);
} }
...@@ -312,6 +332,9 @@ class PageModelExtractor { ...@@ -312,6 +332,9 @@ class PageModelExtractor {
case Url: case Url:
value = fieldExtractor.getSelector().select(page.getUrl().toString()); value = fieldExtractor.getSelector().select(page.getUrl().toString());
break; break;
case RawText:
value = fieldExtractor.getSelector().select(page.getRawText());
break;
default: default:
value = fieldExtractor.getSelector().select(html); value = fieldExtractor.getSelector().select(html);
} }
......
...@@ -52,7 +52,8 @@ public @interface ExtractBy { ...@@ -52,7 +52,8 @@ public @interface ExtractBy {
/** /**
* extract from the raw html * extract from the raw html
*/ */
RawHtml RawHtml,
RawText
} }
/** /**
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment