2019独角兽企业重金招聘Python工程师标准>>>

请参考阅读 http://www.ibm.com/developerworks/library/wa-restful/

the article is good, but not refer to right links for converter download, append below:

  1. Jason format converter

    Download jacson-all-1.9.11.jar

    http://www.java2s.com/Code/Jar/j/Downloadjacksonall1911jar.htm

  2. XML format converter, 这个不用下载,已经包含在spring framework中.

    详细见spring-oxm-4.0.5.RELEASE.jar, 不过这个需要注册bean才能行, 其它两个需要注册的是BufferImageHttpMessageConverter, FormHttpMessageConverter, 其他的都是包含jar就可以自动注册,并使用了.

  3. atom format converter  rome-1.0.jar

    http://www.java2s.com/Code/Jar/r/Downloadrome10jar.htm

  4. Message converter for XML, 其他的自动注册,不用写. 当然写也可以,看着明白点。

    下面仅仅注册了jaxb库,其他的包含在lib就可以了。

        <bean id="marshallingConverter" class="org.springframework.http.converter.xml.MarshallingHttpMessageConverter"><constructor-arg ref="jaxbMarshaller" /><property name="supportedMediaTypes" value="application/xml"/></bean><bean id="jaxbMarshaller" class="org.springframework.oxm.jaxb.Jaxb2Marshaller"><property name="packagesToScan"><list><value>com.company.product.entity.*</value></list></property></bean>
  • Controller and requestmapping,实现了CRUD (Post,Get,Put,Delete).

  • 可以实现Representational state transfer,标准工业格式json and XML

  • 还实现了mvc内建支持modelAndView.

/*** */
package com.company.product.controller;import javax.servlet.http.HttpServletResponse;import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;import com.company.product.entity.Book;
import com.company.product.entity.BookList;
import com.company.product.interfaces.LibraryI;
import com.company.product.jms.MsgProducer;/*** @author zhuji06**/
@Controller
public class LibraryController {private LibraryI library;public void setSender(MsgProducer sender){this.sender = sender;}private MsgProducer sender;public void setLibrary(LibraryI library){this.library = library;}//headers="Accept=application/json, application/xml"@RequestMapping(method=RequestMethod.GET,value="/")public @ResponseBody String welcome(){sender.send("Welcome,Spring REST with ActiveMQ JMS.");return "Welcome,Spring REST.";}@RequestMapping(method=RequestMethod.GET,value="/books/{bookId}")public @ResponseBody Book getBook(@PathVariable("bookId") Integer bookId){return library.getBook(bookId);}@RequestMapping(method=RequestMethod.GET,value="/books")public @ResponseBody BookList getBooks(){return new BookList(library.getBooks());}@RequestMapping(method=RequestMethod.POST,value="/books")public @ResponseBody Book createBook(@RequestBody Book book, HttpServletResponse response){Integer id = library.addBook(book);response.setHeader("Location","/Books/"+id);return library.getBook(id);}@RequestMapping(method=RequestMethod.PUT,value="/books")public @ResponseBody Book updateBook(@RequestBody Book book, HttpServletResponse response){Integer id = library.putBook(book);response.setHeader("Location","/Books/"+id);return library.getBook(id);}@RequestMapping(method=RequestMethod.DELETE,value="/books/{bookId}")public @ResponseBody void deleteBook(@PathVariable("bookId") Integer bookId){library.deleteBook(bookId);}
}
  • Entity and its Wrappers (可以转化xml and Json)

/*** */
package com.company.product.entity;import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;/*** @author zhuji06**/
@XmlRootElement
public class Book {/*** */private Integer id;private String name;private String description;public Book(){super();}public Book(Integer id, String name,String description){this.setId(id);this.setName(name);this.setDescription(description);}@XmlElement(nillable=false,required=true)public String getName() {return name;}public void setName(String name) {this.name = name;}@XmlElementpublic Integer getId() {return id;}public void setId(Integer id) {this.id = id;}@XmlElement(name = "desc")public String getDescription() {return description;}public void setDescription(String description) {this.description = description;}@Overridepublic String toString() {String s = " id :" + id + "\n Name :" + name + "\n description :" + description;return s;}
}

下面的BookList纯粹是为了妥协jaxb对List等的支持不好,所以对其进行了包装,这也可以更好的输出list.

package com.company.product.entity;import java.util.List;import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;@XmlRootElement(name="books")
public class BookList {private int count;private List<Book> books;public BookList() {}public BookList(List<Book> books) {this.books = books;this.count = books.size();}public int getCount() {return count;}public void setCount(int count) {this.count = count;}@XmlElement(name="book")public List<Book> getBooks() {return books;}public void setBooks(List<Book> books) {this.books = books;}
}
  • 如何进行REST 测试呢?

目前商业的比较全的是ibm 的soapUI, 有15天适用版,还有开源的RestClient, java写的简单的测试工具,可以去sourceforge上去下载.其实有另一个强大网络检测工具,可以试用,它就是Fiddler,自己百度去。

在右侧有Composer页面,可以指定Action, URL, Header, and Body等。

这里也需要提醒,如果测试Get方法,需要指定Header里:Accept: application/xml  或者Accept:application/json, 它们会被AnnotationMethodHandlerAdapter使用,先判断URL,后判断Accept, 然后检查produces,来匹配返回的类型。

所以可以两种方式测试

Get http://localhost:8080/SpringREST/service/books/1.xml

Get http://localhost:8080/SpringREST/service/books/1.json

或者 Get http://localhost:8080/SpringREST/service/books/1

Accept: application/xml  或者Accept:application/json

另外在POST类型,需要指定Content-Type:application/json,然后填充Body内容为json格式,如

{"id":0,"name":"Thinking in Java","description":"this is a base book."}

总结,REST service从风格角度是比较好理解和实现的,但是如果要实现一个完全的,安全的服务,还是需要ROD的思维,并且实现authentication without session,这个下一个文章祥解.

Nice week nice day.

转载于:https://my.oschina.net/zhujinbao/blog/286455

REST 之 Spring 4 RESTful service相关推荐

  1. restful api_将Spring MVC RESTful Web服务迁移到Spring 4

    restful api 1引言 Spring 4为MVC应用程序带来了一些改进. 在这篇文章中,我将重点介绍宁静的Web服务,并通过采用Spring 3.2实现的项目并将其升级到Spring 4来尝试 ...

  2. 将Spring MVC RESTful Web服务迁移到Spring 4

    1引言 Spring 4为MVC应用程序带来了一些改进 . 在这篇文章中,我将重点介绍宁静的Web服务,并通过采用Spring 3.2实现的项目并将其升级到Spring 4来尝试这些改进.以下几点总结 ...

  3. ppst——开发技术视频 spring的restful服务搭建

    ppst--开发技术视频 spring的restful服务搭建 [url] www.ppst.cc[/url]这里有更多的开发技术学习视频,大家可以把自己的博客录制成视频,让大家收看,也可以通过收费收 ...

  4. [转]构建基于WCF Restful Service的服务

    本文转自:http://www.cnblogs.com/scy251147/p/3566638.html 前言 传统的Asmx服务,由于遵循SOAP协议,所以返回内容以xml方式组织.并且客户端需要添 ...

  5. 在IIS8.5的环境下配置WCF的Restful Service

    今天在客户的环境中(Windows Server 2012 R2 + IIS 8.5)搭建Call WCF Restful Service的功能,发现了几个环境配置的问题,记录如下: 1):此环境先安 ...

  6. 尝试用单元测试做spring注入调用service

    尝试用单元测试做spring注入调用service public class GoodsCategoryServiceImplTest extends TestCase{ public Applica ...

  7. 框架:SpringBoot构建Restful service完成Get和Post请求

    SpringBoot构建Restful service完成Get和Post请求  一个基本的RESTful service最经常向外提供的请求Method就是Get和Post. 在Get中,常用的都会 ...

  8. 开源的库RestSharp轻松消费Restful Service

    现在互联网上的服务接口都是Restful的,SOAP的Service已经不是主流..NET/Mono下如何消费Restful Service呢,再也没有了方便的Visual Studio的方便生产代理 ...

  9. 使用XFire+Spring构建Web Service(二)

    来源:http://www.blogjava.net/amigoxie/archive/2007/09/28/149074.html 在<使用XFire+Spring构建Web Service( ...

最新文章

  1. 提升大学社团管理工具--轻雀协作
  2. Effective C# 原则1:尽可能的使用属性(property),而不是数据成员(field)
  3. wordpress引入php文件,WordPress主题制作之模板文件的引入方法,wordpress模板
  4. 一步一步配置aspnetdb数据库
  5. 硬质合金销售真的有那么难么?
  6. dgi数据治理_国外数据治理模型比较
  7. 性能测试二八原则,响应时间2/5/8原则
  8. 冲刺阶段站立会议每天任务6
  9. STM8S003F3 使用ADC:固件库版本与寄存器版本
  10. 万物互联会改变什么?
  11. 树莓派3B+ WiFi 无线连接及配置
  12. 9月份入读哈工大计算机研究生了
  13. 废土行动最新服务器机柜销售,《废土行动》避难所 你想要知道的信息我们一次都告诉你...
  14. 【前后端常见的登录方式】
  15. 一起做网店的商品主图的批量采集的步骤
  16. Eclipse TPTP平台配置详细步骤Ver1.0
  17. fastjson之@JSONField注解的几个的使用详细示范
  18. linux:framebuffer驱动之ssd1363驱动和fbtft驱动修改
  19. latex表格内上下边距调整
  20. android bea拷贝,从Android开发中学到一些东西

热门文章

  1. JS function立即调用的几种写法
  2. Visual Studio 2010中的UML
  3. VS2005下 auxDIBImageLoad() 这个函数真囧
  4. 计算机科学与技术专业的课程体系,基于业务的计算机科学与技术专业课程体系...
  5. Nginx的events块指令的配置使用
  6. ObjectFactory 的create()方法什么时候被调用?
  7. 数据库事务原理详解-事务基本概念
  8. 高仿真的类-请求参数映射
  9. Lambda表达式练习2【应用】
  10. 资源权限操作-查询所有资源权限