我是 Java 和 Vertx 的新手,我有一個具有以下格式的查詢字串:
GET /examples/1/data?date_1[gt]=2021-09-28&date_1[lt]=2021-10-28
這里我有date_1一個在一定范圍內的引數。我一直在使用HttpServerRequest類來提取像整數這樣的簡單引數,但不確定如何處理這些型別的范圍引數。
使用簡單的引數,我可以執行以下操作:
String param = request.getParam(paramName);
paramAsInteger = Integer.valueOf(paramAsString);
但是,對于如何處理gt和lt選項以及我們兩次使用相同引數的事實感到困惑。
uj5u.com熱心網友回復:
你說你很難決議這些令牌。這是您可以處理的方法。
首先要理解的是引數名稱不是“date1”
2.1這里其實有兩個引數。“date_1[gt]”,值為“2021-09-28” 2.2。“date_1[lt]”,值為“2021-10-28”
這是因為在 URI 引數定義中,“=”符號之前的所有內容都是引數名稱,之后的所有內容都是引數值。
你可以做
String dateAsString = request.getParam("date1[gt]");
paramAsInteger = toDate(dateAsString)
- 要實作 toDate() 函式,請閱讀這篇簡單的文章如何使用標準庫將字串物件轉換為資料物件(鏈接)
uj5u.com熱心網友回復:
Vert.x 會將這些引數視為兩個獨立的引數。所以RoutingContext#queryParam("date_1[gt]")只會給你的價值[gt]。如果你想要[lt]你需要單獨獲得的價值。
話雖如此,您可以將這個乏味的邏輯移動到一個額外的處理程式中,并將值存盤在RoutingContext. 像這樣的事情可能更容易:
private void extractDates(RoutingContext ctx) {
var startDate = ctx.queryParam("date_1[gt]");
var endDate = ctx.queryParam("date_1[lt]");
var parsedStartDate = DateTimeFormatter.ISO_LOCAL_DATE.parse(startDate.get(0));
var parsedEndDate = DateTimeFormatter.ISO_LOCAL_DATE.parse(endDate.get(0));
// things we put in the context here can be retrieved by later handlers
ctx.put("startDate", parsedStartDate);
ctx.put("endDate", parsedEndDate);
ctx.next();
}
然后,在您的實際處理程式中,您可以按如下方式訪問這兩個日期:
router.get("/date")
.handler(this::extractDates)
.handler(ctx -> {
var responseBody = ctx.get("startDate") " - " ctx.get("endDate");
ctx.end(responseBody);
});
這允許您保持實際業務邏輯簡潔。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/345761.html
上一篇:當一個鍵在并發散列映射中映射到多個值時,如何洗掉映射到一個鍵的值?
下一篇:用字串參考變數
