接上回的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转换,!
以下是一段小小的代码 这是业务逻辑的实现
数据Beans SampleBeans
非常简单的JSON Transformer
至于Converter也很简单
为什么写一个简单的应用需要这么多类??很简单“重用性”,“清晰性”!除了这些简单的Converter Transformer外我们还有许多针对复杂的数据转换的Converter与Transformer,例如带翻页功能的ResultListTransformer以及针对Lucene逻辑关键字(与或非)的数组Converter。为什么要叫这么Strong的名字??因为我学电气的 Converter是变换器,Transformer是变压器...
希望大家多看看!现在这个框架已经用于一个医学相关的语义网门户中。
谢谢!
发布在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是变压器...
希望大家多看看!现在这个框架已经用于一个医学相关的语义网门户中。
谢谢!