`
xhyccc
  • 浏览: 6941 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

LighTECHs--清晰,高重用,开源的POJO-RESTful Engine

阅读更多
接上回的JSON-REST被人潮水般的喷了以后我将事业回归到了REST的学术领域。在完成任务发几篇PP的时候写了这个框架基于Spring管理以及Annotation配置的RESTful WebService Engine。
发布在Google Code http://code.google.com/p/restfulcrudbeans/
原名叫RESTful CRUDBeans,现在改称Lightechs!整个应用分为三个部分(接口)
1.Converter:将URL以及QueryString 和HTTP 请求头中的信息攫取

2.Service:实现服务的业务逻辑

3.Transformer:将服务方法的返回值翻译成感知Accept字段(如JSON,XML...)找到相应的Transformer将其并反射写入HTTP response,如无制定Accept则用缺省Transformer转换,!

以下是一段小小的代码 这是业务逻辑的实现
package org.lightechs.restfulbeans.sample;
import org.lightechs.restfulbeans.annotation.*;

@DefaultTransformer(name="JSON")//一个叫JSON的Transformer配置在Spring下
public class SampleRESTfulBean{

    @ReadMethod
    @ResourceURI(URI="hello/${id}/${ss}")//URL的模式
    public SampleBeans getHelloWorld(@PathParam(name="${id}",converter="NumberInt")int  i,@PathParam(name="${ss}",converter="NumberInt")int c,@NamedParam(name="qid",converter="NumberInt") int j){
//PathParam是在URL中的数据,NamedParam是Query String的值
//这里对应的是如同 hello/123/456?qid=789 这样的URL
    SampleBeans sbs= new SampleBeans();
    sbs.setAge(c+i+j);
    return sbs;
    }
    
    public SampleRESTfulBean() {
    }
}

数据Beans SampleBeans
package org.lightechs.restfulbeans.sample;
public class SampleBeans {
private String name;
private int age;
private boolean sex;

    public SampleBeans() {
    }
    public SampleBeans(String name, int age, boolean sex) {
        this.name = name;
        this.age = age;
        this.sex = sex;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public boolean isSex() {
        return sex;
    }
    public void setSex(boolean sex) {
        this.sex = sex;
    }
}

非常简单的JSON Transformer
package org.lightechs.restfulbeans.transformer;
import javax.servlet.http.HttpServletResponse;
//所有用JSON返回的对象都可以通过它转换。
public class JsonTransformer implements transformer{

    public void doTransformer(Object obj, HttpServletResponse response) {
        Class clz=obj.getClass();
        try{
            response.setContentType("JSON; charset=utf-8");
        if(obj instanceof String)
            response.getWriter().write(""+obj);
        if(obj==null)
             response.getWriter().write(""+obj);
        if(clz.isArray()||obj instanceof java.util.List)
           response.getWriter().write(""+JSONArray.fromObject(obj));
        else 
           response.getWriter().write(""+JSONObject.fromObject(obj));
    }catch(Exception e){
    e.printStackTrace();
    }
    }

    public JsonTransformer() {
    }
}

至于Converter也很简单
package org.lightechs.restfulbeans.converter;
public class Str2Integer implements SingleStringConverter{
    public Object convert(String str) {
        return new Integer(str);
    }
}

为什么写一个简单的应用需要这么多类??很简单“重用性”,“清晰性”!除了这些简单的Converter Transformer外我们还有许多针对复杂的数据转换的Converter与Transformer,例如带翻页功能的ResultListTransformer以及针对Lucene逻辑关键字(与或非)的数组Converter。为什么要叫这么Strong的名字??因为我学电气的 Converter是变换器,Transformer是变压器...
希望大家多看看!现在这个框架已经用于一个医学相关的语义网门户中。
谢谢!
2
0
分享到:
评论
1 楼 xhyccc 2008-12-28  
这个...无人质询???

相关推荐

Global site tag (gtag.js) - Google Analytics