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