我有以下控制器:
public interface SaveController {
@PostMapping(value = "/save")
@ResponseStatus(code = HttpStatus.CREATED)
void save(@RequestBody @Valid SaveRequest saveRequest);
}
saverequest
对应于:
public class SaveRequest {
@NotNull
private SaveType type;
private String name;
}
和savetype
:
public enum SaveType {
DAILY, WEEKLY, MONTHLY;
}
控制器不接收枚举
本身,而是一个camelCase字符串
。我需要将字符串
转换为相应的枚举
。例如:
daily
应变为daily
。Weekly
应变为Weekly
。monthly
应变为monthly
。字符串
应变为空
。我试过使用spring的converter
类,当enum
在对象内部时,它就不起作用了(至少我不知道在这种情况下如何使它起作用)。
我真的不知道还能尝试什么
您需要的是具有自定义批注和枚举的自定义验证类。
javax.validation
库不内置对枚举的支持。
验证类
public class SaveTypeSubSetValidator implements ConstraintValidator<SaveTypeSubset, SaveType> {
private SaveType[] subset;
@Override
public void initialize(SaveTypeSubset constraint) {
this.subset = constraint.anyOf();
}
@Override
public boolean isValid(SaveType value, ConstraintValidatorContext context) {
return value == null || Arrays.asList(subset).contains(value);
}
}
用于带有验证消息的验证注释的接口
@Target({METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE})
@Retention(RUNTIME)
@Documented
@Constraint(validatedBy = SaveTypeSubSetValidator.class)
public @interface SaveTypeSubset {
SaveType[] anyOf();
String message() default "must be any of {anyOf}";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
用法
@SaveTypeSubset(anyOf = {SaveType.NEW, SaveType.OLD})
private SaveType SaveType;
这是一种方法。本文还提到了更多的方法。
https://www.baeldung.com/jackson-serialize-enums这个站点可能会为您提供大量的选择。
最好的可能是这样的:
public enum SaveType {
DAILY, WEEKLY, MONTHLY;
@JsonCreator
public static SaveType saveTypeforValue(String value) {
return SaveType.valueOf(value.toUpperCase());
}
}
问题内容: 我编写角度控制器的风格是这样的(使用控制器名称而不是函数) 我现在需要的是提供我要定义解析部分的路线时: 由于控制器定义为名称,如何解决以下问题? 为了更详细地阐明,我想在解析路由之前从服务器加载一些数据,然后在控制器中使用这些数据。 更新: 更准确地说,我希望每个模块都有其“解析”功能,该功能将在执行具有该控制器的root用户之前被调用。这篇文章中的解决方案(由MiskoHevery
控制字符序列以'\为前缀,以\\结尾。在控制序列中有两个数字,它们指定控制字符。 在上面的示例中,结果字符串为 ESC代表不可打印的ASCII转义字符。 输入'a string'\ctrl\''会产生错误 你知道吗?顺便说一句:我们使用的是antlr V4.5。
问题内容: 我要提取长十六进制字符串形式的数据,我需要将其转换为十进制表示法,截断18个小数位,然后在JSON中使用。 例如,我可能具有十六进制字符串: 最初我尝试使用,但是由于它支持的最高级别,我的数量最终太大了。 转换和截断后的示例为10 ^ 6。但是,在某些情况下,此数字最多可以为10 ^ 12(意味着截断为10 ^ 30!)。 攻击此问题的最佳策略是什么? 问题答案: 使用math / b
有人能告诉我为什么这段代码会引发异常吗? 此代码引发以下异常: 我使用以下JDK在Windows 7上运行
考虑一下,我得到了以下枚举类: 我想指定ostream操作符( 并获得以下输出,这是Foo。 我的问题是: 是否有存储枚举“名称说明符”的地方?(即,对于枚举类TestEnum,它是None、Foo和Bar),因此我可以编写一个函数(或者至多是函数模板)来指定TestEnum的ostream操作符,例如: 到目前为止,我是这样做的: 我见过一些使用库的解决方案,但这次我不希望使用它。
编者按:此代码示例来自Rust 1.0之前的版本,并且在语法上是无效的Rust 1.0代码。此代码的更新版本会产生不同的错误,但答案仍然包含有价值的信息。 肯定有更好的方法将二进制字符串转换为十六进制字符串比这? 这样做的结果是 我用的是Rustc0.12。夜间