㈠ 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的rest介面如何使用要求用它做一個第三方控制已運行的java程序停止運行。不是很懂 求詳解!
@Provider
@Proces("application/json")
@Consumes("application/json")
public class GsonProvider implements MessageBodyWriter<Object>,
MessageBodyReader<Object> { private final Gson gson;
public GsonProvider() {
gson = new GsonBuilder().().setDateFormat(
"yyyy-MM-dd").create();
} public boolean isReadable(Class<?> type, Type genericType, Annotation[] annotations,
MediaType mediaType) {
return true;
} public Object readFrom(Class<Object> type, Type genericType,
Annotation[] annotations, MediaType mediaType,
MultivaluedMap<String, String> httpHeaders, InputStream entityStream)
throws IOException, WebApplicationException {
return gson.fromJson(new InputStreamReader(entityStream, "UTF-8"), type);
} public boolean isWriteable(Class<?> type, Type genericType, Annotation[] annotations,
MediaType mediaType) {
return true;
} public long getSize(Object obj, Class<?> type, Type genericType,
Annotation[] annotations, MediaType mediaType) {
return -1;
} public void writeTo(Object obj, Class<?> type, Type genericType,
Annotation[] annotations, MediaType mediaType,
MultivaluedMap<String, Object> httpHeaders, OutputStream entityStream)
throws IOException, WebApplicationException {
entityStream.write(gson.toJson(obj, type).getBytes("UTF-8"));
} }
㈢ java調用rest介面如何HttpClient 使用put x-www-form-urlencoded數據
把post的改成試試
HttpPost httpPost = new HttpPost("http xxx");
List <NameValuePair> nvps = new ArrayList <NameValuePair>();
nvps.add(new BasicNameValuePair("username", "vip"));
nvps.add(new BasicNameValuePair("password", "secret"));
httpPost.setEntity(new UrlEncodedFormEntity(nvps));
CloseableHttpResponse response2 = httpclient.execute(httpPost);
try {
System.out.println(response2.getStatusLine());
HttpEntity entity2 = response2.getEntity();
// do something useful with the response body
// and ensure it is fully consumed
EntityUtils.consume(entity2);
} finally {
response2.close();
}
㈣ java 要調用別人提供的rest api介面介面是url 比如實現簡單的增加操作 具體實現哪些步驟
看api介面需要哪些參數,你把參數加上,然後發一個http請求就可以了。
㈤ java 調用 rest 介面 怎麼寫請求行的信息
package com.demo;
import ja<img id="selectsearch-icon" src="https://gss0.bdstatic.com/70cFsjip0QIZ8tyhnq/img/iknow/qb/select-search.png" alt="搜索">va.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import javax.xml.bind.DatatypeConverter;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
public class restTest {
public static voidmain(String[] args) {
try {
DefaultHttpClient Client = newDefaultHttpClient();
HttpGet httpGet = newHttpGet("你的地址");
String encoding =DatatypeConverter.printBase64Binary("admin:admin".getBytes("UTF-8"));
httpGet.setHeader("Authorization", "Basic " +encoding);
HttpResponse response = Client.execute(httpGet);
System.out.println("response =" + response);
BufferedReader breader = newBufferedReader(new InputStreamReader(response.getEntity().getContent()));
StringBuilder responseString = newStringBuilder();
String line = "";
while ((line = breader.readLine()) !=null) {
responseString.append(line);
}
breader.close();
String repsonseStr =responseString.toString();
System.out.println("repsonseStr =" + repsonseStr);
} catch (IOException e) {
e.printStackTrace();
}
}
}
㈥ java調用restful api介面,有沒有什麼好的框架推薦
一個好的RESTful API,應該具備以下特徵: 這個API應該是對瀏覽器友好的,能夠很好地融入Web,而不是與Web格格不入。 1.瀏覽器是最常見和最通用的REST客戶端。好的RESTful API應該能夠使用瀏覽器+HTML完成所有的測試(不需要使用編程語言)。
㈦ 使用myeclipse編寫java程序,用到了rest框架,對於rest的使用是怎樣的,對於rest是剛接觸,希望給予指導。
我的理解,REST不能稱為框架,而是一種思想,提供了一種不同平台之間的交互方式。多數人眼中的介面,約束的是功能和數據,而REST是對介面規劃進行約束。舉個例子,一般的介面個取得用戶信息的介面,會有一個URI,請求方法,會對請求的參數做定義,會對響應的內容和格式做定義。REST的作用,是對「這個介面應該制定一個什麼樣的URI,HTTP請求的方法應該使用GET、POST、DELETE還是PUT」這一類的問題的解決思路。
㈧ java調用rest介面 maven需要寫哪些依賴
1.多個系統在一個研發環境之中,她們的相互依賴可以通過maven進行相互依賴
2.如果某天她們分開了,當她們彼此想念的時候,她們可以把自己的JAR包放在公共倉庫之中,
這樣,她們又可以相互依賴了。MAVEN可以實現自動上傳JAR包到某倉庫,當然手動放也是可以的哦.
3.在給他人提供依賴的JAR包原則是應該是完整的,好像本地方法一樣使用,例如不適宜提供介面而不提供
介面的實現
4.依賴並不是必須的,她們可以在已知通信協議的情況下,自己編寫訪問的代碼
5.對於一個大的SDK比較好的做法是調用遠程伺服器代碼和DTO代碼應該分成兩個JAR包,使用方
可以選擇兩個JAR都要,直接使用SDK方法就可以了,還有一種做法就是我只要你的DTO,調用方法自己
編寫,這樣給使用方帶來了更好的選擇。
㈨ java中rest介面實現數據接收與轉發
java中的介面是一種特來殊的類,使用關源鍵字interface創建。介面功能完全實現後,可以打成jar包,提供給其他公司使用。
要返回json格式數據,可以把介面中抽象方法的返回值類型規定為JSONObject或JSONString類型。這樣當其他公司調用時,得到的數據就是json數據了。
另外,以jar形式提供的介面,可以通過反編譯得到你的源碼,如果你不希望開源,就要加密了。
㈩ java如何調用介面方式
如果是已經有了來URL的接源口
URL url = new URL(介面);
創建鏈接對方介面對象
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
設置請求屬性
conn.setRequestProperty("accept", "*/*");
conn.setRequestProperty("connection", "Keep-Alive");
conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)");
設置是否向httpUrlConnection輸出,設置是否從httpUrlConnection讀入
conn.setDoOutput(true);
conn.setDoInput(true);
最後斷開鏈接,保證速度
conn.disconnect();
基本就這樣用需要更多的就要自己看api了