甲方要求所有厂商提供一个restful的接口监控自己的所有服务及数据库是否正常,在此之前都不知道什么是restful。。。。没办法硬着头皮上。下面是我对restful的简单了解以及应用实例,希望能帮助到跟我一样的小白。
实现Restful 有两种一种是由Jersey提供的,另一种是Apache CXF的,本文介绍的是Jersey Restful。Apache CXF在下一篇始终介绍。
什么是Restful?
Restful是一种软件架构风格、设计风格,提供了一组设计原则和约束条件。主要用于客户端和服务器交互类的软件,基于这个风格设计的软件可以更简洁,更有层次感,更易于实现缓存等级制。
是对资源的具体操作HTTP方法映射到资源的CRUD(创建、读取、更新和删除)操作,基本模式如下:
- HTTP GET:读取/列出/检索单个或资源集合。
- HTTP POST:新建资源。
- HTTP PUT:更新现有资源或资源集合。
- HTTP DELETE:删除资源或资源集合。
具体大家去度娘看一下,我这就不多介绍了,本文以快速实现Jersey Restful风格接口为主要目的。下面就直接上代码了
常用注解:
@GET:该注解标记的方法表明用于处理GET请求,GET方法是幂等且安全的。
@POST:该注解标记的方法表明处理POST请求,POST方法表明是一种创建操作的方法,POST方法是一种写操作的HTTP请求,RPC中的写操作均是使用post方法,而在REST中我们只是使用POST方法来添加资源。
@DELETE:该注解标记的方法表明这个方法执行的是一个删除资源的操作,其返回值可以是void,即没有返回值。
@Consumes:在服务器端,@Consumes(MediaType.APPLICATION_XML)定义了服务器端要消费的媒体类型,也就是说消费客户端请求实体的媒体类型,可以是xml、json等类型。
@Produces:@Consumes(MediaType.APPLICATION_XML)定义了服务器端生产的媒体类型,即服务器端产生的响应实体的媒体类型,同样也可以是xml、json等媒体类型。
@Path:该注解可以标记在类名之上,也可以标记在方法名上。该注解接收一个value参数,表示定义资源的地址。另外,资源地址相同,但是HTTP方法不同的两个方法是完全两个不同的REST接口,HTTP方法和资源地址相结合在一起才可以完成对一个资源的定位。
@QueryParam:该注解表明是一个查询条件,查询条件决定了方法的作用域,查询参数组成了查询条件。Jersey中使用@QueryParam注解来定义查询参数。另外注解@QueryParam还可以和注解@DefaultVaule一起使用,注解@DefaultValue的作用则是预置一个默认值,当请求中不包括该参数时候使用这个默认值。
@PathParam:该注解定义路径的参数信息,每一个参数都对应一个子资源。
@FormParam:该注解表示用来定义表单的参数。
@Context:该注解用来解析上下文参数。(@Context HttpRequest request)
注解转自https://www.cnblogs.com/wrong5566/p/5985001.html
下面首先定义两个bean,ParentStatus 和SubStatus
public cpublic class SubStatus {lass ParentStatus {
private String status;
private List<SubStatus> errdetail = new ArrayList<SubStatus>();
//get/set 忽略
}
public class SubStatus {
private String status;
private String errorMessage;
//get/set 忽略
}
在定义一个
Controller
@Path("/wsdlservice")
public class WSDLService {
@GET
@Path("/wsdls")
@Produces(MediaType.APPLICATION_JSON)
public String GetWSDL() throws Exception{
ParentStatus p = new ParentStatus();
SubStatus subStatus = new SubStatus();
subStatus.setStatus("21");
subStatus.setErrorMessage("1212112132wdasfsdsf");
p.setStatus("-1");
p.getErrdetail().add(subStatus);
String jsonString = JSONArray.fromObject(p).toString();
return jsonString;
}
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<display-name>WSDL Management</display-name>
<servlet>
<servlet-name>Jersey RESTful Application</servlet-name>
<servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>jersey.config.server.provider.packages</param-name>
<param-value>cn.com.sinosoft.Controller</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>Jersey RESTful Application</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
发布在tomcat后在浏览器执行http://localhost:8080/FirstRestFul/rest/wsdlservice/wsdls 返回json,完成。
[{"errdetail":[{"errorMessage":"1212112132wdasfsdsf","status":"21"}],"status":"-1"}]
所使用的jar包,一个都不能少。: