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

接上回的JSON-REST被人潮水般的喷了以后我将事业回归到了REST的学术领域。在完成任务发几篇PP的时候写了这个框架基于Spring管理以及Annotation配置的RESTful WebService Engine。
发布在Google Code [u] http://code.google.com/p/restfulcrudbeans/[/u]
原名叫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是变压器...
希望大家多看看!现在这个框架已经用于一个医学相关的语义网门户中。
谢谢!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值