当前位置: 首页 > 知识库问答 >
问题:

@RequestParam和映射枚举

侯令雪
2023-03-14

我对@Request estParam的枚举有问题。在方法getRoom中有两个枚举:Sort。方向SourceFunding排序。方向是内置的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

Spring Boot能够接受枚举作为请求参数

枚举作为Spring Boot Rest中的请求参数

如何在RequestParm中将多个值转换为枚举?

@RequestParam defaultvalue不接受枚举值作为默认值

在Java中接受并解析枚举类型查询参数的整数

@Request estParam带有参数列表

还有很多没有效果。我也试着模仿Sort。枚举中的方向。

****** 代码 *******

错误:{时间戳:"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.Request estParamxxx.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(不适用)]不匹配;嵌套的异常是java。lang.IllegalArgumentException:参数值[PRIVATE_INSURANCE]与预期类型[xxx.xxxxx.Leo.booking.SourceFunding(不适用)]

控制器:

    @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  

共有1个答案

锺高翰
2023-03-14

在我看来,在使用postman时,您的查询参数输入没有得到正确的值。错误显示您输入的“PUBLIC\u INSURANCE”中只有一个引号。

Spring使用枚举。valueOf(string)来计算queryParam值。如果我们使用“公共保险”,它将找不到任何相应的枚举。

您可以尝试通过console.log(pm.request.url.query)在postman的测试部分记录您的输入请求吗

 类似资料:
  • 我有一个如下的枚举 此枚举表示客户的类型。 我们有一个返回客户详细信息的API 我需要验证customerType值是否为枚举中存在的值,是否有方法通过使用getContentType方法或其他方法验证方法声明中的值,就像我在date而不是方法体中所做的那样。 请帮忙。

  • 问题内容: 我需要预先将未实现接口的枚举映射到现有数据库,该数据库使用将该枚举存储在与所有者类相同的表中。 在这种情况下应如何处理映射?持久化到数据库不会改变,因为实现该接口的所有枚举都将具有不同的值,但是我不确定应如何从数据库中检索对象(我是否需要自定义映射器,它将尝试实例化一个使用指定的enum类进行枚举吗?Hibernate本身是否支持此功能?)。 问题答案: 可以创建一个自定义(例如thi

  • 问题内容: Hibernate提供的注释支持使用或的两种类型的映射。当我们使用映射时,它使用的“名称” 而不是Enum的表示形式。在数据库列仅包含一个字符的情况下,这是一个问题。例如,我有以下枚举: 当我坚持枚举使用,即hibernate尝试在数据库中存储的值是开放的。但是,我的数据库列仅包含一个字符,因此会引发异常。 克服这个问题的一个办法是改变枚举类型持有单个字符(如,代替,)。但是,这降低了

  • Spring 3.x、JPA 2.0、Hibernate 4.x、Postgresql 9.x. 使用希望映射到Postgresql枚举的枚举属性处理Hibernate映射类。 使用枚举列上的where子句进行查询会引发异常。 SQL: Hibernate xml查询: > 按而不是按枚举查询工作正常。 没有数据库交互的Java工作良好: 不是,与和相同,异常更改为: 在查看https://sta

  • 问题内容: 我需要预先将没有实现接口的枚举映射到现有数据库,该数据库使用将该枚举存储在与所有者类相同的表中。 在这种情况下应如何处理映射?持久化到数据库不会改变,因为实现该接口的所有枚举都将具有不同的值,但是我不确定应如何从数据库中检索对象(我是否需要自定义映射器,它将尝试实例化一个使用指定的enum类进行枚举吗?Hibernate是否本身支持此功能?)。 问题答案: 可以创建一个自定义(例如th

  • 问题内容: Hibernate提供的注释支持使用或两种类型的映射。当我们使用映射时,它使用的“名称” 而不是Enum 的表示形式。在数据库列仅包含一个字符的情况下,这是一个问题。例如,我有以下枚举: 当我坚持枚举使用,即休眠尝试在数据库中存储的值是开放的。但是,我的数据库列仅包含一个字符,因此会引发异常。 克服这个问题的一个办法是改变枚举类型持有单个字符(如,代替,)。但是,这降低了可读性。有什么