簡體   English   中英

@RequestParam 和映射枚舉

[英]@RequestParam and mapping enum

我對枚舉作為@RequestParam有疑問。 getRooms方法中有兩個枚舉: Sort.DirectionSourceFunding 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.

我已閱讀並測試過:

Spring 的 @RequestParam 與 Enum

Spring Boot 能夠接受 Enum 作為請求參數

枚舉作為 Spring Boot Rest 中的請求參數

如何在RequestParm中將多個值轉換為枚舉?

@RequestParam defaultvalue 不接受枚舉值作為默認值

接受並解析 Java 中枚舉類型查詢參數的整數

@RequestParam 帶有參數列表

和許多其他沒有效果。 我也嘗試在我的枚舉中模擬 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM