我有一个这样的枚举:
public enum Type {
@JsonProperty("private")Private, group, supergroup, channel
}
Run Code Online (Sandbox Code Playgroud)
json文件本身有私有字段,所以我需要私有(这是java键盘)进行序列化和映射,但如果我使用私有的全部小写,这是一个运行时错误.我使用@JsonProperty作为上面的代码,但仍然无法正常工作.
你对此有什么解决方案吗?
这是例外:
com.fasterxml.jackson.databind.exc.InvalidFormatException:无法构造com.mehdi.model.Chat的实例.字符串值'private'的类型:value不是声明的Enum实例名称之一:[Private,group,supergroup,channel ]来源:/home/mehdi/Desktop/json.txt; line:14,column:16](通过参考链:com.mehdi.model.Update ["message"] - > com.mehdi.model.Message ["chat"] - > com.mehdi.model.Chat ["在com.fasterxml.jackson.jackson的com.fasterxml.jackson.databind.exc.InvalidFormatException.from(InvalidFormatException.java:55)中输入com.fasterxml.jackson.databind.DeserializationContext.weirdStringException(DeserializationContext.java:742).位于com.fasterxml.jackson.databind.deser的com.fasterxml.jackson.databind.deser.std.EnumDeserializer.deserialize(EnumDeserializer.java:20)中的.databind.deser.std.EnumDeserializer.deserialize(EnumDeserializer.java:91) .SettableBeanProperty.deserialize(SettableBeanProperty.java:525)at com.fasterxml.jackson.databind.deser.impl.MethodProperty.deserializeAndSet(MethodProperty.java:99)at com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer) .java:242)位于com.fasterxml.jackson.databind.deser.Se的com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:118)ttableBeanProperty.deserialize(SettableBeanProperty.java:525)at com.fasterxml.jackson.databind.deser.impl.MethodProperty.deserializeAndSet(MethodProperty.java:99)at com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer. java:242)at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:118)at com.fasterxml.jackson.databind.deser.SettableBeanProperty.deserialize(SettableBeanProperty.java:525)at com.fasterxml位于com.fasterxml.jackson.databind.deser的com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:242)中的.jackson.databind.deser.impl.MethodProperty.deserializeAndSet(MethodProperty.java:99) .BeanDeserializer.deserialize(BeanDeserializer.java:118)at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:2993)at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2052)at com.mehdi.ff.Test.main(Test.java:25)at sun.reflect.NativeMe thodAccessorImpl.invoke0(本地方法)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)at java.lang.reflect.Method.invoke(Method. java:497)at com.intellij.rt.execution.application.AppMain.main(AppMain.java:140)
进程以退出代码0结束
你必须在枚举实现中使用@JsonValue.
public enum Type {
Private("private"),
Group("group"),
Supergroup("supergroup"),
Channel("channel")
private String jsonValue;
private Type(final String json) {
this.jsonValue = json;
}
@JsonValue
public String jsonValue() {
return this.jsonValue;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5087 次 |
| 最近记录: |