无法将JSON十六进制颜色转换为Java字符串或java.awt.Color

时间:2015-05-01 12:04:18

标签: java json jackson

我有一个班级Foo

@JsonIgnoreProperties(ignoreUnknown = true)
public class Foo {
  private String color = "cccccc";

  public void setColor(String color) {
    this.color = color;
  }

  @FlexField(fieldType = FlexField.FlexFieldType.ReadWrite)
  public Color getColor() {
    return ColorUtil.getColor(color);
  }

  public void setColor(Color color) {
    this.color = ColorUtil.getHexString(color);
  }
}

杰克逊色混合:

abstract class ColorMixIn extends java.awt.Color{
    ColorMixIn(@JsonProperty("red") int red, @JsonProperty("green") int green, @JsonProperty("blue") int blue) {
        super(red, green, blue);
    }

    @Override @JsonProperty("red") public abstract int getRed();
    @Override @JsonProperty("green") public abstract int getGreen();
    @Override @JsonProperty("blue") public abstract int getBlue();

}

杰克逊色彩模块:

public class ColorModule extends SimpleModule {
    @Override
    public void setupModule(SetupContext context) {
        context.setMixInAnnotations(java.awt.Color.class, ColorMixIn.class);
        //other setup if needed
    }
}

他们的注册类似于:

val mapper: ObjectMapper = new ObjectMapper
mapper.registerModule(new ColorModule())

当我返回Foo时,它会按预期序列化:

"foo": {
  "color": {
    "red": 204,
    "green": 204,
    "blue": 204
  }
}

然而,当我想从JSON创建一个foo时,它只会创建:

"foo": {
  "color": "cccccc"
}

我尝试过看起来像的JSON:

"foo": {
  "color": {
    "red": 224,
    "green": 224,
    "blue": 224
  }
}

"foo": {
  "color": "dddddd"
}

无济于事。

我想在ColorMixin类中创建一个新的构造函数,如下所示:

ColorMixIn(@JsonProperty("color") String hex) {
  super(java.awt.Color.decode(hex).getRed(), java.awt.Color.decode(hex).getGreen(), java.awt.Color.decode(hex).getBlue()
}

可能有所帮助,但没有快乐。

我确信我遗漏了一些明显的想法?

0 个答案:

没有答案