接上回的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是变压器...
希望大家多看看!现在这个框架已经用于一个医学相关的语义网门户中。
谢谢!
分享到:
相关推荐
### Java的几种对象详解:PO-VO-DAO-BO-POJO #### 一、PO:Persistant Object(持久对象) 持久对象(Persistent Object,简称PO),主要用于与数据库中的表进行映射。一个简单的PO对象可以代表数据库表中的一条...
maven-guvnor-install-pojo-plugin-1.1.0.17-sources.jar
maven-guvnor-install-pojo-plugin-1.1.0.11-sources.jar
maven-guvnor-install-pojo-plugin-1.1.0.16-sources.jar
maven-guvnor-install-pojo-plugin-1.1.0.15-sources.jar
maven-guvnor-install-pojo-plugin-1.1.0.14-sources.jar
maven-guvnor-install-pojo-plugin-1.1.0.13-sources.jar
maven-guvnor-install-pojo-plugin-1.1.0.12-sources.jar
maven-guvnor-install-pojo-plugin-1.1.0.13.jar
maven-guvnor-install-pojo-plugin-1.1.0.17.jar
maven-guvnor-install-pojo-plugin-1.1.0.16.jar
maven-guvnor-install-pojo-plugin-1.1.0.15.jar
maven-guvnor-install-pojo-plugin-1.1.0.14.jar
maven-guvnor-install-pojo-plugin-1.1.0.12.jar
maven-guvnor-install-pojo-plugin-1.1.0.11.jar
本项目“POJO-Best-Practice”聚焦于如何在Android环境中高效且规范地创建和使用POJO。以下是关于创建模型POJO的Android最佳实践的详细说明: 1. **简单性与可读性**: - POJO应保持简单,避免包含复杂的业务逻辑...
在Java开发中,POJO(Plain Old Java Object)是一个简单的对象类,不包含任何特定框架的规范或约定,主要用于封装数据。"数据表生成POJO"这个主题涉及到将数据库中的表结构映射到Java世界中的类,使得我们可以方便...
JSON Schema到Groovy POJO(Plain Old Java Object)的转换是一个常见的需求,特别是在开发与JSON数据交互的Java或Groovy应用程序时。`raml2code`项目提供了解决这一问题的工具,允许开发者将JSON Schema定义自动...
**Spring Boot Restful Web Service** 在现代Web开发中,Spring...通过以上知识点,我们可以构建一个高效、易于维护的Spring Boot Restful Web Service应用,提供清晰、规范的API接口,供客户端进行无状态的数据交互。
FFPOJO项目是用于Java应用程序的基于POJO的平面文件解析器库。 重要信息:该项目的源代码已迁移到GitHub:https://github.com/gibaholms/ffpojo