人們,我發現什麼似乎是一個問題/(錯誤?)MSF4J因爲在URI中包含一個@MatrixParam註釋變量導致受影響的(微)服務'掛'無限期地,或者如果通過瀏覽器訪問,即使正確,爲路徑/端點提供「404未找到」消息。問題與MSF4J和@MatrixParam
這裏是一個代碼片段,它說明了這個問題 - 它以通常的方式使用microservicesrunner()編譯ok(eclipse/maven)並且沒有錯誤地部署。
package org.test.service;
import javax.ws.rs.GET;
import javax.ws.rs.MatrixParam;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Response;
@Path("books")
public class MPTest { // MatrixParam Test
@GET
@Produces(MediaType.TEXT_PLAIN)
@Path("/query")
// method to respond to 'GET' requests
public Response getListOfBooks(@MatrixParam("Author") String author) {
// do something in here to get book data from DB and sort by titles
List<String> titles = .......;
return Response.status(200) .entity("List of Books by " +author+ "ordered by title " + titles).build();
}
}
有了這個代碼片段,訪問URL「(宿主:8080)/書籍/查詢;作者=米老鼠」應由作者造成圖書列表從DB中檢索到的(I省略了實際的代碼爲了清晰起見,因爲它與這篇文章無關)。
但是,它沒有到達那裏,所以代碼沒有執行。據我可以告訴調試器,沒有@MatricParam值被檢索 - 它保持空,直到過程超時。諸如curl和wget之類的東西只是在它們超時之前掛起,而從瀏覽器中,我能得到的最好的結果是URI沒有找到404的錯誤,即使它是有效的。
但是,如果我將@MatrixParam替換爲@PathParam,它可以完美工作,並且可以獲取以其整體方式檢索的URL字符串。我得到的URI與預期的一樣 - 沒有奇怪的十六進制字符,沒有拼寫錯誤等等。輸入的URI是你回來的東西。所以,那裏沒有問題。
跨平臺(Linux和Windoze的三個版本)的行爲也是一致的,所以它與操作系統本身沒有任何關係。同樣,我得到與多個客戶端和工具相同的行爲,所以它也不是問題。
因此,它似乎是MSF4J框架/域內的問題,我可以在這裏使用一些支持/幫助/建議,因爲我已經達到了撕掉我的頭髮的目的.....任何想法,鄉親?
我能找到一個類似的問題,唯一提及未經封閉的答覆爲「題外話」(見Rest API Matrix param annotation),所以我覺得這需要重新開放,因爲它似乎是一個真正的問題....
的問候,並感謝您的幫助, 裏克
ThanksThysitha - 你的回答非常感謝,它當然解釋了奇怪的行爲......我會很快提出一個問題。同時,我將不得不解決它。 Rick – rickturner646