JavaSpringWeb-使用验证器将子属性转换为对象

JavaSpringWeb-使用验证器将子属性转换为对象,java,spring-mvc,jackson,spring-validator,spring-json,Java,Spring Mvc,Jackson,Spring Validator,Spring Json,我将SpringWeb与控制器服务模型和验证一起使用。 我有一个颜色对象和一个颜色服务 @Data public class Color { private String name; private long value; private int rating; } 在我的一个控制器中,我正在接受一个对象: public class NewEventRequest { @NotNull @Size(min = 5, max = 30) private Str

我将SpringWeb与控制器服务模型和验证一起使用。 我有一个颜色对象和一个颜色服务

@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
子属性的类型为
Color
。但是,我希望发送者能够只发送颜色名称(颜色不多,而且它们都缓存在内存中)


我知道我可以使用字符串类型的颜色和验证器来确保颜色存在,但有没有办法也将其转换为颜色

为什么不使用枚举类型而不是字符串?例如:

public enum ColorName{
红、黄、蓝。。。
}
@资料
公共类颜色{
私有颜色名称;
私人长期价值;
私人内部评级;
}
我不知道我是否正确理解你的意思,
但它可能只包含您定义的值。因此,您甚至不需要验证这些值。

为什么不使用枚举类型而不是字符串?例如:

public enum ColorName{
红、黄、蓝。。。
}
@资料
公共类颜色{
私有颜色名称;
私人长期价值;
私人内部评级;
}
我不知道我是否正确理解你的意思,
但它可能只包含您定义的值。因此,您甚至不需要验证这些值。

如果
JSON
负载不适合
Java
模型,则需要实现自定义反序列化器或接口。看看这个例子:


如果
JSON
负载不适合
Java
模型,则需要实现自定义反序列化器或接口。看看这个例子:


您可以使用或与自定义约束一起使用。看看:,@MichałZiober是的,我知道,“@ValidColor”就是这么做的。但即使我这样做,它也只会验证传入的字符串(好或坏),它不会将其转换为颜色结构。要转换类型,可以使用
Converter
接口。看看这个例子:@MichałZiober太棒了,这就是我要找的!将其作为答案发布,我会将其标记为正确答案。您可以使用或自定义约束。看看:,@MichałZiober是的,我知道,“@ValidColor”就是这么做的。但即使我这样做,它也只会验证传入的字符串(好或坏),它不会将其转换为颜色结构。要转换类型,可以使用
Converter
接口。看看这个例子:@MichałZiober太棒了,这就是我要找的!将其作为答案发布,我会将其标记为正确答案。这不会有任何帮助-仍然需要在传入字符串和颜色之间进行自定义转换。无论哪种方式,数据在运行时都是可编辑的,因此我不能同时使用enum,这也不会有任何帮助-仍然需要在传入字符串和颜色之间进行自定义转换。无论哪种方式,数据在运行时都是可编辑的,因此我也不能使用enum