package com.geccocrawler.gecco.spider.render; import java.lang.reflect.Field; import java.util.HashMap; import java.util.Map; import java.util.Set; import net.sf.cglib.beans.BeanMap; import org.apache.commons.lang3.StringUtils; import org.reflections.ReflectionUtils; import com.geccocrawler.gecco.annotation.RequestParameter; import com.geccocrawler.gecco.request.HttpRequest; import com.geccocrawler.gecco.response.HttpResponse; import com.geccocrawler.gecco.spider.SpiderBean; import com.geccocrawler.gecco.spider.conversion.Conversion; public class RequestParameterFieldRender implements FieldRender { @Override @SuppressWarnings({ "unchecked" }) public void render(HttpRequest request, HttpResponse response, BeanMap beanMap, SpiderBean bean) { Map<String, Object> fieldMap = new HashMap<String, Object>(); Set<Field> requestParameterFields = ReflectionUtils.getAllFields(bean.getClass(), ReflectionUtils.withAnnotation(RequestParameter.class)); for(Field field : requestParameterFields) { RequestParameter requestParameter = field.getAnnotation(RequestParameter.class); String key = requestParameter.value(); if(StringUtils.isEmpty(key)) { key = field.getName(); } String src = request.getParameter(key); try { Object value = Conversion.getValue(field.getType(), src); fieldMap.put(field.getName(), value); } catch(Exception ex) { //throw new FieldRenderException(field, src, ex); FieldRenderException.log(field, src, ex); } } beanMap.putAll(fieldMap); } }