java - Spring字符串到枚举转换器接受空字符串
问题描述
我有以下string
到enum
转换器工厂:
public final class StringToEnumConverterFactory implements ConverterFactory<String, Enum<?>> {
public <T extends Enum<?>> Converter<String, T> getConverter(Class<T> targetType) {
return new StringToEnumConverter(targetType);
}
@RequiredArgsConstructor
private static final class StringToEnumConverter<T extends Enum<T>> implements Converter<String, T> {
private final Class<T> enumType;
public T convert(String source) {
try {
return Enum.valueOf(this.enumType, source.toUpperCase().trim());
} catch (IllegalArgumentException e) {
throw new RuntimeException("Argument invalid " + source);
}
}
}
}
我已经实现了以下控制器:
public interface GetGraphsController {
@GetMapping(value = "/graphs", produces = MediaType.APPLICATION_JSON_VALUE)
Graphs getGraphs(@RequestParam GraphType graphType);
}
GraphType
对应于以下内容enum
:
public enum GraphType {
A,
B;
}
由于graphType
是必需的,我希望 Spring 在请求时抛出异常/graphs?graphType=
(注意 nographType
包括在内)。但是,允许传递 no graphType
,并且不会引发错误。
我也尝试将以下条件添加到convert
,但结果是相同的:
if (source.isBlank()) {
throw new RuntimeException("Argument invalid " + source);
}
解决方案
我终于能够通过添加@Validated
到控制器接口@NotNull
和graphType
. 显然,如果没有这些注释,则不会进行验证。@RequestParam
有一个required
字段(true
默认情况下),它只检查查询参数是否包含在请求中,而不关心它的值
推荐阅读
- bash - Bash - 如何替换文件中第 m 行的第 n 个字符串?
- python - 如何解决 Checkmarx 针对 python 代码“args=parser.parse_args()”的“命令注入”问题?
- sql - 我想用 rdbms 函数的表中的字符串更新
- numpy - NumPy 数组看起来很慢;难道我做错了什么?
- javascript - JavaScript 如何允许您在不实际创建对象的情况下执行成员函数?
- java - 试图编译和运行简单的 JavaFX 类。错误:“javac:无效标志:--module-path=C:\...”
- graphene-python - Graphene 'variables' 的弃用,'variable_values' 不起作用
- apache-spark - Spark 提交带有 JAR 依赖项的 pyspark 文件
- python - 需要使用示例静态 JSON 验证和验证脚本生成的结果 JSON 是否正确
- powershell - 需要帮助将用户以前的 ou、描述和规范名称导出到 csv 文件,这样我就可以创建一个脚本来将其反向用于 DR