繁体   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