[英]@RequestParam and mapping enum
我對枚舉作為@RequestParam
有疑問。 在getRooms
方法中有兩個枚舉: Sort.Direction
和SourceFunding
。 Sort.Direction
是內置的 Spring 枚舉,它可以完美地從 String 轉換為 Enum:
http://address:port/all?sortDirection=ASC => OK
http://address:port/all?sortDirection=DESC => OK
但是當我打電話時
http://address:port/all?sourceFunding=PUBLIC_INSURANCE => ALWAYS ERROR.
我已閱讀並測試過:
@RequestParam defaultvalue 不接受枚舉值作為默認值
和許多其他沒有效果。 我也嘗試在我的枚舉中模擬 Sort.Direction。
****** 編碼 *******
錯誤:{“時間戳”:“2022-07-15T15:53:27.371+00:00”,“狀態”:400,“錯誤”:“錯誤請求”,“消息”:“無法轉換類型的值'java.lang.String' 到所需類型 'xxx.xxxxx.Leo.booking.SourceFunding';嵌套異常是 org.springframework.core.convert.ConversionFailedException:無法從類型 [java.lang.String] 轉換為類型 [ @org.springframework.web.bind.annotation.RequestParam xxx.xxxxx.Leo.booking.SourceFunding] 用於值“PUBLIC_INSURANCE”;嵌套異常是 java.lang.IllegalArgumentException:沒有枚舉常量 xxx.xxxxx.Leo.booking。 SourceFunding.'PUBLIC_INSURANCE'", "path": "/room/all" }
也可以是
參數值 [PRIVATE_INSURANCE] 與預期類型 [xxx.xxxxx.Leo.booking.SourceFunding (n/a)] 不匹配; 嵌套異常是 java.lang.IllegalArgumentException:參數值 [PRIVATE_INSURANCE] 與預期類型不匹配 [xxx.xxxxx.Leo.booking.SourceFunding (n/a)]
控制器:
@GetMapping(path = "/all")
public Page<Room> getRooms(@RequestParam(defaultValue = "0") Integer pageNumber,
@RequestParam(defaultValue = "10") Integer pageSize,
@RequestParam(defaultValue = "id") String sortBy,
@RequestParam(defaultValue = "ASC") Sort.Direction sortDirection,
@RequestParam(required = false) Long departmentId,
@RequestParam(required = false) Long hospitalId,
@RequestParam(required = false) SourceFunding sourceFunding
) {...}
枚舉:
public enum SourceFunding {
PUBLIC_INSURANCE,
PRIVATE_INSURANCE,
PAID_BY_CITIZENS,
PAID_BY_COMPANY,
CHARITY,
COLLECTIVE_FUNDING_FSS,
OTHER,
NONE;
}
更新1 - 這太瘋狂了......
SourceFunding.valueOf(sourceFundingString); => Error 'No enum constant ...'
log.info("!! {}", Arrays.toString(SourceFunding.values())); => Return all enum's fields
在我看來,使用郵遞員時,您的查詢參數輸入沒有得到正確的值。 錯誤顯示它在您的輸入'PUBLIC_INSURANCE'
中有單引號。
Spring 使用Enum.valueOf(string)
來評估 queryParam 值。 如果我們使用'PUBLIC_INSURANCE'
,它將找不到任何對應的枚舉。
您可以嘗試通過console.log(pm.request.url.query)
在郵遞員的tests
部分記錄您的輸入請求並檢查您的輸入是否正確。
通過單擊View
-> Show Postman Console
可以看到 postman 中的控制台日志
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.