Java Spring web - 使用验证器将 sub-属性 转换为对象
Java Spring web - convert sub-property to object with validator
我正在使用 spring 带有控制器服务模型和验证的网络。
我有一个颜色对象和一个颜色服务。
@Data
public class Color {
private String name;
private long value;
private int rating;
}
在我的一个控制器中,我正在接受一个对象:
public class NewEventRequest {
@NotNull
@Size(min = 5, max = 30)
private String eventName;
/* @ValidColor */
private Color eventColor;
// private String eventColor;
}
如您所见,eventColor
sub-属性 的类型为 Color
。但是,我希望发件人能够只发送颜色名称(颜色不多,而且它们都缓存在内存中)。
我知道我可以使用字符串类型的颜色和验证器来确保该颜色存在,但是有没有办法将其转换为 Color?
为什么不使用枚举类型而不是字符串?像这样:
public enum ColorName {
Red, Yellow, Blue, ...
}
@Data
public class Color {
private ColorName name;
private long value;
private int rating;
}
不知道我理解的对不对,
但它可以包含只有您定义的值。所以你甚至不需要验证这些值。
JSON
的有效负载不适合 Java
模型,您需要实现自定义解串器或 Converter 接口。看看这个例子:
- Jackson deserialize JSON object field into single list property
我正在使用 spring 带有控制器服务模型和验证的网络。 我有一个颜色对象和一个颜色服务。
@Data
public class Color {
private String name;
private long value;
private int rating;
}
在我的一个控制器中,我正在接受一个对象:
public class NewEventRequest {
@NotNull
@Size(min = 5, max = 30)
private String eventName;
/* @ValidColor */
private Color eventColor;
// private String eventColor;
}
如您所见,eventColor
sub-属性 的类型为 Color
。但是,我希望发件人能够只发送颜色名称(颜色不多,而且它们都缓存在内存中)。
我知道我可以使用字符串类型的颜色和验证器来确保该颜色存在,但是有没有办法将其转换为 Color?
为什么不使用枚举类型而不是字符串?像这样:
public enum ColorName {
Red, Yellow, Blue, ...
}
@Data
public class Color {
private ColorName name;
private long value;
private int rating;
}
不知道我理解的对不对, 但它可以包含只有您定义的值。所以你甚至不需要验证这些值。
JSON
的有效负载不适合 Java
模型,您需要实现自定义解串器或 Converter 接口。看看这个例子:
- Jackson deserialize JSON object field into single list property