您的位置:首页 > 编程语言 > Java开发

Restlet - 基于Spring的Restlet开发实例

2014-01-05 17:23 393 查看
1、相关说明version:文中示例使用的Spring版本为3.0.3,Restlet版本为2.1.0。entity:Student2、创建Java Web工程,添加相关Jar。文中示例工程名为SpringRestlet。说明:动态代理的cglib-nodep.jar不可缺少。3、web.xml配置
<servlet>
<servlet-name>dispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:/applicationContext.xml</param-value>
</init-param>
</servlet>
<!--Spring ApplicationContext load -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- Spring,avoid leaking memory -->
<listener>
<listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class>
</listener>
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<!-- restlet servlet -->
<servlet>
<servlet-name>restlet</servlet-name>
<servlet-class>org.restlet.ext.spring.SpringServerServlet</servlet-class>
<init-param>
<param-name>org.restlet.application</param-name>
<param-value>application</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>restlet</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
4、Model实体类代码
@JsonSerialize(include = Inclusion.NON_NULL)
publicclassStudent {
privateInteger id;
privateString name;
privateInteger sex;
privateInteger age;
publicStudent() {
}
/**setter/getter**/
}
说明:
@JsonSerialize
(include = Inclusion.NON_NULL)为JackSon的注解,作用是返回JSON格式的实体时不返回该实体类值为Null的Field,如: {"id" : 1,
"name" : null,
"sex" : 1,"age" : 20} 。
5、Resource代码
(1)、StudentResource:示例中主要针对单个实例的Retrieve、Update和Delete。
@Controller@Scope("prototype")publicclassStudentResource extendsServerResource{privateInteger id;@AutowiredprivateStudentBO studentBO;publicvoidsetStudentBO(StudentBO studentBO) {this.studentBO = studentBO;}@OverrideprotectedvoiddoInit() throwsResourceException {id = Integer.valueOf((String) getRequestAttributes().get("studentId"));}@Get("json")publicStudent findStudentById(){Student s = this.studentBO.getStudent(id);returns;}@Delete("json")publicInteger deleteStudentById() {returnthis.studentBO.removeStudent(id);}@Put("json")publicInteger updateStudent(Student student) {student.setId(id);returnthis.studentBO.saveOrUpdateStudent(student);}}
(2)、StudentListResource:示例中主要针对单个实例的Create和多个实例的Retrieve。
@Controller@Scope("prototype")publicclassStudentListResource extendsServerResource {@AutowiredprivateStudentBO studentBO;@PostpublicInteger saveStudent(Student student) {returnstudentBO.saveOrUpdateStudent(student);}@Get("json")publicList<Student> findStudentAll() {returnstudentBO.getStudentAll();}publicvoidsetStudentBO(StudentBO studentBO) {this.studentBO = studentBO;}}
说明:接受Spring管理的Bean,@Scope("prototype")的annotation必须要有,否则会出现正确调用指定方法的问题,用xml配置Bean时也必须要Attribute:scope。6、BusinessObject代码
@Service@Scope("prototype")publicclassStudentBO {privatestaticMap<Integer, Student> students = newHashMap<Integer, Student>();// next IdprivatestaticintnextId = 5;static{students.put(1, newStudent(1, "Michael", 1, 18));students.put(2, newStudent(2, "Anthony", 1, 22));students.put(3, newStudent(3, "Isabella", 0, 19));students.put(4, newStudent(4, "Aiden", 1, 20));}publicStudent getStudent(Integer id) {returnstudents.get(id);}publicList<Student> getStudentAll() {returnnewArrayList<Student>(students.values());}publicInteger saveOrUpdateStudent(Student student) {if(student.getId() == null) {student.setId(nextId++);}students.put(student.getId(), student);returnstudent.getId();}publicInteger removeStudent(Integer id) {students.remove(id);returnid;}}
7、Spring applictionContext.xml配置
<bean name="application"class="org.restlet.Application"><property name="inboundRoot"><bean class="org.restlet.ext.spring.SpringRouter"><constructor-arg ref="application"/><property name="attachments"><map><entry key="/student/{studentId}"><bean class="org.restlet.ext.spring.SpringFinder"><lookup-method name="create"bean="studentResource"/></bean></entry><entry key="/student"><bean class="org.restlet.ext.spring.SpringFinder"><lookup-method name="create"bean="studentsResource"/></bean></entry></map></property></bean></property></bean><!-- spring annotation --><context:component-scan base-package="com.xl.sr"/>
说明:该application在web.xml中引用8、Client代码
publicclassStudentClient {publicvoidstudent_get(){try{ClientResource client = newClientResource("http://127.0.0.1:8080/SpringRestlet/student/1");Representation representation = client.get();System.out.println(representation.getText());} catch(Exception e) {e.printStackTrace();}}publicvoidstudent_delete() {try{ClientResource client = newClientResource("http://127.0.0.1:8080/SpringRestlet/student/1");Representation representation = client.delete();System.out.println(representation.getText());} catch(Exception e) {e.printStackTrace();}}publicvoidstudent_put(){try{ClientResource client = newClientResource("http://127.0.0.1:8080/SpringRestlet/student/1");Student student = newStudent("Test_Put", 1, 18);Representation representation = client.put(student, MediaType.APPLICATION_JAVA_OBJECT);System.out.println(representation.getText());} catch(Exception e) {e.printStackTrace();}}publicvoidstudent_post(){try{ClientResource client = newClientResource("http://127.0.0.1:8080/SpringRestlet/student");Student student = newStudent("Test_Post", 1, 18);Representation representation = client.post(student, MediaType.APPLICATION_JAVA_OBJECT);System.out.println(representation.getText());} catch(Exception e) {e.printStackTrace();}}publicvoidstudent_findAll(){try{ClientResource client = newClientResource("http://127.0.0.1:8080/SpringRestlet/student");Representation representation = client.get();System.out.println(representation.getText());} catch(Exception e) {e.printStackTrace();}}publicstaticvoidmain(String[] args) {StudentClient client =  newStudentClient();client.student_get();}}
9、补充(1)、请求参数问题:客户端发送形如/student/{studentId}的URI请求时,可能是还需要携带其他parameter的,参数携带形式可如/student/{studentId}?name=John&sex=23;Server端获取参数时,针对在URI{}内的参数使用getRequest().getAttributes().get("studentId");方式获取,针对附加参数可以通过Form form = getRequest().getResourceRef().getQueryAsForm(); String name = form.getValues("name");方式获取。(2)、客户端工具:测试Server端时,如果不想写Client端code,可以是WizTools.org的RestClient-ui.jar的小工具,Post和Put请求时的对象可以以JSON格式添加到Http body中即可。(3)、相关资源:文中工程以上传至51cto下载中心,含代码和Jar包。链接地址: http://down.51cto.com/data/847094本文出自 “袭冷” 博客,请务必保留此出处http://xilen.blog.51cto.com/8455881/1348737
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: