【发布时间】:2014-07-16 18:56:36
【问题描述】:
我有以下枚举声明:
@Document
@JsonFormat(shape= JsonFormat.Shape.OBJECT)
@JsonAutoDetect()
public enum Compass {
north("Upper Center"),
south("Lower Center"),
east("Left Center"),
west("Right Center"),
ne("Upper Right"),
nw("Upper Left"),
se("Lower Right"),
sw("Lower Left"),
;
@JsonProperty
private String presentableName;
@JsonProperty
private String name;
private Compass() {}
private Compass(String presentableName) {
this.presentableName = presentableName;
}
public String getPresentableName() {
return presentableName;
}
public void setPresentableName(String presentableName) {
this.presentableName = presentableName;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@JsonCreator
public static Compass fromObject(@JsonProperty("name") String name, @JsonProperty("presentableName") String presentableName) {
return Compass.sw;
}
}
输入以json对象的形式到达,大部分都被正确反序列化,但相关部分如下,其中placement是Compass:
{"placement":{"name":"se","presentableName":"Lower Right"}}
反序列化不起作用。我以为JsonCreator 可以在这里工作,但由于某种原因,我得到了一个
org.springframework.web.HttpMediaTypeNotSupportedException:不支持内容类型'application/json;charset=UTF-8'
这实际上只是反序列化失败的症状。
如果我将创建者更改为:
@JsonCreator
public static Compass fromObject(@JsonProperty("name") String name) {
return Compass.sw;
}
它变得更加奇怪,因为现在 name 等于 { 而不是 se(这看起来像是 json 对象中的一个错误,但它是同一个对象在一秒钟前被反序列化,所以它可能没问题)
我正在使用jackson 2.2.3,这是目前最新的。
【问题讨论】:
-
你能显示完整的堆栈跟踪吗?我只是在猜测,但可能是您误解了错误消息。
标签: java json serialization enums jackson