Json Spring Boot Jackson如何反序列化具有名称空间前缀的子实体的Json?
我试图在我的Spring Boot server应用程序(使用Jackson)中反序列化这个json。它抛出一个com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException:Unrecognized字段。前缀似乎是个问题,我可以告诉Jackson忽略user_元数据字段,它工作正常,但我确实需要访问该值。我浏览了各种Spring@Json注释,似乎没有一个涉及前缀Json Spring Boot Jackson如何反序列化具有名称空间前缀的子实体的Json?,json,spring,spring-boot,jackson,Json,Spring,Spring Boot,Jackson,我试图在我的Spring Boot server应用程序(使用Jackson)中反序列化这个json。它抛出一个com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException:Unrecognized字段。前缀似乎是个问题,我可以告诉Jackson忽略user_元数据字段,它工作正常,但我确实需要访问该值。我浏览了各种Spring@Json注释,似乎没有一个涉及前缀 { "sub":"", "nickname":"",
{
"sub":"",
"nickname":"",
"name":"",
"picture":"",
"updated_at":"2020-05-01T11:23:01.110Z",
"email":"",
"email_verified":false,
"https://somedomain:eu:auth0:com/user_metadata":{
"tennant":"value"
}
}
以及Java中的模型类
public class UserMetaData {
private String tennant;
public String getTennant() {
return tennant;
}
public void setTennant(String tennant) {
this.tennant = tennant;
}
}
public class UserInfo {
private String email;
private String sub;
private String picture;
private String nickname;
private Date updated_at;
private boolean email_verified;
private UserMetaData user_metadata;
private String name;
}
为简洁起见,删除了getter和setter
堆栈跟踪如下:-
com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "https://raptorsoftware:eu:auth0:com/user_metadata" (class uk.co.raptorsoftware.domain.UserInfo), not marked as ignorable (8 known properties: "sub", "user_metadata", "updated_at", "name", "email", "picture", "email_verified", "nickname"])
at [Source: (String)"{"sub":"","nickname":"darren.roberts","name":"","picture":"https://s.gravatar.com/avatar/c496e319edc303163f2e87e5ca91507d?s=480&r=pg&d=https%3A%2F%2Fcdn.auth0.com%2Favatars%2Fda.png","updated_at":"2020-05-01T16:39:11.271Z","email":"darren.roberts@","email_verified":false,"https://raptorsoftware:eu:auth0:com/user_metadata":{"tennant":"some value"}}"; line: 1, column: 411] (through reference chain: uk.co.raptorsoftware.domain.UserInfo["https://raptorsoftware:eu:auth0:com/user_metadata"])
at com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException.from(UnrecognizedPropertyException.java:61) at com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException.from(UnrecognizedPropertyException.java:61)
at com.fasterxml.jackson.databind.DeserializationContext.handleUnknownProperty(DeserializationContext.java:840)
at com.fasterxml.jackson.databind.deser.std.StdDeserializer.handleUnknownProperty(StdDeserializer.java:1206)
at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.handleUnknownProperty(BeanDeserializerBase.java:1592)
at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.handleUnknownVanilla(BeanDeserializerBase.java:1570)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:294)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:151)
at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4202)
at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3205)
at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3173)
at uk.co.raptorsoftware.web.BaseController.getUserInfo(BaseController.java:49)
at uk.co.raptorsoftware.web.MemberController.listMembers(MemberController.java:49)'''
问题是url作为UserMetaData的键。尝试使用
@JsonProperty
public class UserInfo {
private String email;
private String sub;
private String picture;
private String nickname;
private Date updated_at;
private boolean email_verified;
@JsonProperty(name="https://somedomain:eu:auth0:com/user_metadata")
private UserMetaData user_metadata;
private String name;
}
请添加完整的stacktraceAs作为补充,我无法控制前缀,因为它来自第三方应用程序。还可以使用camelCase而不是underbars作为属性名
updatedAt
。并阅读关于@JsonProperty
注释非常感谢Jens。那真是一种享受。但我仔细地注意到,属性名必须是“:”分隔的,而不是“/”,因此语法与常规url略有不同。