Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/333.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
Java Jackson@JsonIgnoreProperties不是';不处理引用的类属性?_Java_Spring_Jackson - Fatal编程技术网

Java Jackson@JsonIgnoreProperties不是';不处理引用的类属性?

Java Jackson@JsonIgnoreProperties不是';不处理引用的类属性?,java,spring,jackson,Java,Spring,Jackson,我试图创建一个模型(Request)类,该类将忽略它引用的嵌套类的属性。我被告知,我不能以任何方式修改引用的模型(User),因此我试图从请求模型中忽略它的属性 @Data @Builder public class Request { @JsonIgnoreProperties(value = {"id"}) User user; } // class I cannot modify @Data @Builder public class User { Str

我试图创建一个模型(
Request
)类,该类将忽略它引用的嵌套类的属性。我被告知,我不能以任何方式修改引用的模型(
User
),因此我试图从
请求
模型中忽略它的属性

@Data
@Builder
public class Request {
  @JsonIgnoreProperties(value = {"id"})
  User user;
}

// class I cannot modify
@Data
@Builder
public class User {
  String id;
  String name;
  ...
}
在有效负载中,我仍然看到id被序列化和反序列化,因此注释显然不起作用。如果我把它放在
User
的类级别,它似乎工作得很好,但由于我无法修改
User
,我也尝试了:

@JsonIgnoreProperties(value = {"user.id"})
public class Request {
  User user;
以上都不起作用。医生说

从2.0开始,此注释可以应用于类和属性


我正在Spring Boot项目中使用Jackson 2.10.2。我缺少什么?

创建一个扩展用户的类,如下所示:

public class MyUser extends User {
    @JsonIgnore           
    String id;     
}

@Data
@Builder
public class Request {
  MyUser user;
}

创建一个扩展用户的类,如下所示:

public class MyUser extends User {
    @JsonIgnore           
    String id;     
}

@Data
@Builder
public class Request {
  MyUser user;
}

我正在运行此测试并运行:

@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class Request {
    @JsonIgnoreProperties("id")
    User user;
}

@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class User {

    String id;
    String name;

}



public class TestClass {
    public static void main(String[] args) throws JsonProcessingException {
        ObjectMapper mapper= new ObjectMapper();

        final Request value = Request.builder()
            .user(User.builder()
                .id("qw423432")
                .name("asdasdjsadjasdasd")
                .build())
            .build();
        System.out.println(mapper.writeValueAsString(value));

        System.out.println(mapper.readValue("{\"user\":{\"id\": \"a\", \"name\":\"b\"}}", Request.class));
    }

}

您认为您的测试有什么不同吗?

我正在运行此测试,并且可以正常工作:

@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class Request {
    @JsonIgnoreProperties("id")
    User user;
}

@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class User {

    String id;
    String name;

}



public class TestClass {
    public static void main(String[] args) throws JsonProcessingException {
        ObjectMapper mapper= new ObjectMapper();

        final Request value = Request.builder()
            .user(User.builder()
                .id("qw423432")
                .name("asdasdjsadjasdasd")
                .build())
            .build();
        System.out.println(mapper.writeValueAsString(value));

        System.out.println(mapper.readValue("{\"user\":{\"id\": \"a\", \"name\":\"b\"}}", Request.class));
    }

}

你觉得你的测试有什么不同吗?

你对你的示例没问题,我正在运行相同的测试,它也可以工作,你能用
ObjectMapper mapper=new ObjectMapper()在main方法中尝试一个本地示例吗
mapper.writeValueAsString(object)
@MarcoPens我做了
Request Request=mapper.readValue(“{\'user\:{\'id\:{\'a\”,\'name\:\'b\”,Request.class)
id
仍在进行反序列化。您对您的示例没有问题,我正在运行相同的示例,并且它可以正常工作,您可以使用
ObjectMapper mapper=new ObjectMapper()在main方法中尝试一个本地示例吗
mapper.writeValueAsString(object)
@MarcoPens我做了
Request Request=mapper.readValue(“{\'user\:{\'id\:{\'a\”,\'name\:\'b\”,Request.class)
id
仍在反序列化。我希望如此。但实际模型要大得多,不想复制整个类。我希望。但是实际的模型要大得多,不想复制整个类打印?它打印此
请求(user=user(id=null,name=b))
,这是您正在寻找的响应吗?我的打印
请求(user=user(id=a,name=b))
…Lol你有没有仔细检查过你的
jackson databind
jackson core
是否在同一个2.10.2版本中使用?我刚刚用
jackson 2.9.7
对它进行了测试,得到了与@Marco Pens相同的结果。你的
系统.out.println(mapper.readValue(“{“user\:{“id\”::“a\”,“name\:“b\”),“Request.class))打印?它打印此
请求(user=user(id=null,name=b))
,这是您正在寻找的响应吗?我的打印
请求(user=user(id=a,name=b))
…Lol您是否仔细检查了您的
jackson数据绑定
jackson core
是否在相同的2.10.2版本中使用?我刚刚使用
jackson 2.9.7
对其进行了测试,得到了与@Marco Pens相同的结果。