Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Json Spring Boot Jackson如何反序列化具有名称空间前缀的子实体的Json?_Json_Spring_Spring Boot_Jackson - Fatal编程技术网

Json Spring Boot Jackson如何反序列化具有名称空间前缀的子实体的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":"",

我试图在我的Spring Boot server应用程序(使用Jackson)中反序列化这个json。它抛出一个com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException:Unrecognized字段。前缀似乎是个问题,我可以告诉Jackson忽略user_元数据字段,它工作正常,但我确实需要访问该值。我浏览了各种Spring@Json注释,似乎没有一个涉及前缀

{
   "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略有不同。