我对@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
在我看来,在使用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 的表示形式。在数据库列仅包含一个字符的情况下,这是一个问题。例如,我有以下枚举: 当我坚持枚举使用,即休眠尝试在数据库中存储的值是开放的。但是,我的数据库列仅包含一个字符,因此会引发异常。 克服这个问题的一个办法是改变枚举类型持有单个字符(如,代替,)。但是,这降低了可读性。有什么