❶ REST 请求处理
javax.ws.rs.ext.Providers 是JAX-RS 2.0定义的一种辅助接口,其实现类用于辅助REST框架完成过滤和读写拦截的功能,可以使用@Provider 注解标注这些类。Providers接口一共定义了四个方法,分别用来获取MessageBodyReader,MessageBodyWriter,ExceptionMapper,ContextResolver
Jersey 之所以支持那么多中响应实体的传输格式,是因为其底层实体Providers具备的对不同格式的处理能力。Jersey内部提供了丰富的MessageBodyReader和MessageBodyWriter 接口的实现类,用于处理不同格式的表述
如上图,请求流程中存在三种角色,分别是:用户,REST客户端和REST服务器,请求始于请求的发送,止于调用Resonse的readEntity()方法
(1).用户请求提交数据,客户端接收请求,进入第一个扩展点:客户端请求过滤器 ClientRequestFilter 的filter()方法
(2).请求处理过滤完毕后,流程进入第二个扩展点:客户端写拦截器WriterInterceptor实现类的aroundWriterTo() 方法,实现对客户端序列化操作的拦截
(3).客户端消息体写处理器MessageBodyWriter 执行序列化,流程从客户端过渡到服务器端
(4).服务器接收请求,流程进入第三个扩展点:服务器前置请求过滤器ContainerRequestFilter实现类 的filter()方法
(5).过滤器处理完毕后,服务器根据请求匹配资源方法,如果匹配到相应的资源方法,流程进入第四个扩展点:服务器后置请求过滤器ContainerRequestFilter 实现类 的filter() 方法
(6).后置请求过滤器处理完毕后,力促进入第五个扩展点:服务器读拦截器ReaderInterceptor实现类 的aroundReadFrom() 方法,拦截服务器端反序列化操作
(7).服务器消息体读处理器MessageBodyReader 完成对客户端数据流的反序列化,服务器执行匹配的资源方法
(8).REST请求资源的处理完毕后,流程进入第六个扩展点:服务器响应过滤器 ContainerResponseFilter 实现类 的filter() 方法
(9).过滤器处理完毕后,流程进入第七个扩展点:服务器写拦截器WriterInterceptor实现类 的aroundWriterTo() 方法,实现对服务器端序列化到客户端这个操作的拦截
(10).服务器消息体写处理器MessageBodyWriter 执行序列化,流程返回到客户端一侧
(11).客户端接收响应,流程进入第八个扩展点:客户端响应过滤器ClientResponseFilter 实现类 的filter() 方法
(12).过滤处理完毕后,客户端响应实例response 返回到用户一侧,用户执行response.readEntity(),流程进入第九个扩展点:客户端拦截器ReaderInterceptor实现类 的aroundReadFrom() 方法,对客户端反序列化进行拦截
(13).客服端消息体读处理器MessageBodyReader 执行反序列化,将Java类型的对象最终作为readENtity()方法的返回值
JAX-RS-2.0定义的4种过滤器扩展点接口,供开发者实现其业务逻辑,按请求处理流程的先后顺序为:客户端请求过滤器(ClientRequestFilter) -------> 服务端请求过滤器(ContainerRequestFilter)-------->服务端响应过滤器(ContainerResponseFilter)——>客户端响应过滤器(ClientResponseFilter)
ClientRequestFilter
ClientResponseFilter
ContainerRequestFilter
ContainerResponseFilter
Jersey 内部实现了几个典型应用的拦截器,他们是成对出现的
ReaderInterceptor
WriterInterceptor
编码解码拦截器(ContentEncoder)
优先级的定义使用注解 @Priority ,优先级的值是一个整数值,对于ContainerReauest,PreMatchContainerRequest,ClientRequest 和读写拦截器 采用升序策略,数值越小,优先级越高;对于ContainerResponse和ClientResponse采用降序策略,数值越大,优先级越高
❷ 设有各不同面值人民币若干,编写一个java程序,对任意输入的一个金额,给出能组合出这个值的最佳可能
public class Money {
public static void main(String[] args) {
// 所有金额以分为单位
int money = 146;
// 所有钞票面以分为单位,从大到小排列,10000是100块,20是2角
int[] rmbs = { 10000, 5000, 2000, 1000, 500, 100, 50, 20, 10, 5, 2, 1 };
// rest是剩余的钱,刚开始为所求的钱,随便选钱rest越变越小,直到为0
int rest = money;
for (int rmb : rmbs) {
// num为钞票个数
int num = rest / rmb;
if (num > 0) {
rest = rest - rmb * num;
System.out.println("钞票面额(分):" + rmb + " 个数:" + num + " 还差多少钱(分):" + rest);
// 钱凑齐了,程序结束
if (rest == 0) {
System.exit(1);
}
} // end if num
} // end for rmb
}
}
❸ java容器有哪些 restlet
一、基于spring配置的Rest简单服务
1、新建RestSpringApplication Web工程。
将restlet和spring的jar包复制进来。红色部分为新加入进来的jar包。
将上篇中的RestApplication工程项目中的src的源文件复制过来。
2、将web.xml加入下面代码
<servlet>
<servlet-name>restlet</servlet-name>
<servlet-class>
org.restlet.ext.spring.RestletFrameworkServlet
</servlet-class>
<init-param>
<param-name>org.restlet.component</param-name>
<param-value>restletComponent</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>restlet</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
上面代码指定了restlet使用spring的RestletFrameworkServlet。
3、建立restlet-servlet.xml文件,只需要配置org.restlet.ext.spring.SpringRouter,及对应的路径和资源文件。
<bean name="root">
<property name="attachments">
<map>
<entry key="/student/{studentId}">
<bean>
<lookup-method name="create" bean="StudentResource" />
</bean>
</entry>
<entry key="/student">
<bean>
<lookup-method name="create" bean="StudentsResource" />
</bean>
</entry>
</map>
</property>
</bean>
<bean id="StudentResource" class="org.lifeba.ws.resource.StudentResource" scope="prototype"/>
<bean id="StudentsResource" class="org.lifeba.ws.resource.StudentsResource" scope="prototype"/>
上面的代码配置了 /student/{studentId}对应StudentResource,以及student对应StudentsResource资源类。通过SpringRouter可以非常方便的通过attachments配置资源路径。如果你有更多的路径,你可以建立多个entry即可。
4、好了,你现在可以重启tomcat了,输入 http://localhost:8085/RestSpringApplication/student/1 ,访问正常。
二、测试添加、删除、更新方法。
1、student_post方法,添加一个Student,成功后返回新建studentId为2的对象。
public void student_post(){
try {
Form queryForm = new Form();
queryForm.add("name","steven_spring");
queryForm.add("clsId","201002");
queryForm.add("sex","2");
queryForm.add("age","12");
ClientResource client = new ClientResource("http://localhost:8085/RestSpringApplication/student");
Representation representation =client.post(queryForm.getWebRepresentation());
System.out.println(representation.getText());
} catch (Exception e) {
e.printStackTrace();
}
}
访问http://localhost:8085/RestSpringApplication/student/2
访问http://localhost:8085/RestSpringApplication/student ,可以看到有2个Student对象。
2、student_delete方法,删除Id为1的Student,成功执行后返回1。
public void student_delete(){
try {
ClientResource client = new ClientResource("http://localhost:8085/RestSpringApplication/student/1");
Representation representation =client.delete();
System.out.println(representation.getText());
} catch (Exception e) {
e.printStackTrace();
}
}
再次访问http://localhost:8085/RestSpringApplication/student,可以看到只有一个Id为2的Student对象。
3、student_put方法,更新Id为2的Student。
public void student_put(){
try {
Form queryForm = new Form();
queryForm.add("name","steven_spring_modify");
queryForm.add("clsId","201012");
queryForm.add("sex","12");
queryForm.add("age","24");
ClientResource client = new ClientResource("http://localhost:8085/RestSpringApplication/student/2");
Representation representation =client.put(queryForm);
System.out.println(representation.getText());
} catch (Exception e) {
e.printStackTrace();
}
}
访问http://localhost:8085/RestSpringApplication/student/2
通过上面的代码已经完全实现了Spring中的restlet的配置。上面只对Student对象做了介绍,你也可以实现对Course在spring中配置,基本方法一样。这里不再阐述。
❹ 濡備綍浣跨敤Java娴嬭瘯IBM Systems Director鐨凴EST API
1.鎵嬪姩锛堜娇鐢ㄥ伐鍏凤級锛氫娇鐢ㄤ竴浜涘栭儴 REST 瀹㈡埛绔锛屽 Firefox Poster銆乭ttp4e 绛夛紝骞舵墜鍔ㄨ皟鐢 REST API銆傛垜浠鍦ㄦ湰鏁欑▼涓浣跨敤浜 Poster銆傛偍鍙浠ヤ娇鐢ㄨ嚜宸卞枩娆㈢殑 REST 瀹㈡埛绔銆
2.鑷鍔锛氫娇鐢ㄧ紪绋嬭瑷鎴栬剼鏈鑷鍔ㄨ皟鐢 REST API銆傛湰鏁欑▼灏嗕粙缁嶄娇鐢 Java 杩涜岃嚜鍔ㄦ祴璇曘傛偍鍙浠ヤ娇鐢ㄨ嚜宸卞枩娆㈢殑浠讳綍鍏朵粬璇瑷鎴栬剼鏈銆
杩欎袱涓鏂规硶鐨勮存槑濡備笅锛
1.鎵嬪姩锛堜娇鐢 Poster锛夛細
鍦ㄦ湰鑺備腑锛屾垜浠灏嗚ㄨ轰娇鐢 Poster 鎵嬪姩娴嬭瘯涓浜 IBM Systems Director 鐨勫熀鏈鍔熻兘锛
1.鑾峰緱璧勬簮鍒楄〃锛圙ET 鎿嶄綔锛
2.鍙戠幇鏂拌祫婧 锛圥OST 鎿嶄綔锛
3.淇鏀瑰凡鍙戠幇鐨勮祫婧愶紙PUT 鎿嶄綔锛
4.鍒犻櫎璧勬簮锛圖ELETE 鎿嶄綔锛
1.鑾峰緱璧勬簮鍒楄〃锛圙ET 鎿嶄綔锛夛細
濡傚浘 1 鎵绀猴紝鎮ㄤ娇鐢 GET 鎿嶄綔鍙浠ュ垪鍑鸿祫婧愩侴ET 妫绱㈡湁鍏宠ヨ祫婧愮殑淇℃伅銆傛绱㈣祫婧愮殑璇锋眰濡傚浘 1 鎵绀猴細
❺ 如何实现支持REST的Java Business Services
下图显示了示例实现中的类。蓝色所示的类是框架外部的类,将它们放在这里是为了展示与框架的结构关系。
转载仅供参考,版权属于原作者。祝你愉快,满意请采纳哦
❻ java 如何模拟浏览器调用rest api接口
packagecom.demo;
importjava.io.BufferedReader;
importjava.io.IOException;
importjava.io.InputStreamReader;
importjavax.xml.bind.DatatypeConverter;
importorg.apache.http.HttpResponse;
importorg.apache.http.client.methods.HttpGet;
importorg.apache.http.impl.client.DefaultHttpClient;
publicclassrestTest{
publicstaticvoidmain(String[]args){
try{
DefaultHttpClientClient=newDefaultHttpClient();
HttpGethttpGet=newHttpGet("你的地址");
Stringencoding=DatatypeConverter.printBase64Binary("admin:admin".getBytes("UTF-8"));
httpGet.setHeader("Authorization","Basic"+encoding);
HttpResponseresponse=Client.execute(httpGet);
System.out.println("response="+response);
BufferedReaderbreader=newBufferedReader(newInputStreamReader(response.getEntity().getContent()));
StringBuilderresponseString=newStringBuilder();
Stringline="";
while((line=breader.readLine())!=null){
responseString.append(line);
}
breader.close();
StringrepsonseStr=responseString.toString();
System.out.println("repsonseStr="+repsonseStr);
}catch(IOExceptione){
e.printStackTrace();
}
}
}