【问题标题】:How to ignore JSON properties similar to @JsonIgnore in Deserialization如何在反序列化中忽略类似于 @JsonIgnore 的 JSON 属性
【发布时间】:2021-11-28 05:05:58
【问题描述】:

我有一个类似下面的 JSON 对象:

[
  {
     "objA": {
       "propA": "AAAA",
       "propB": "BBBB",
       "objB": {
         "objC": {
           "propC": "CCCC",
           "propD": "DDDD"
         }
       },
       "objD": [
         "asa"
       ],
       "propE": "AW",
       "propF": "533",
       "propG": "ABW",
       "propH": "ARU",
       "objE": {
         "objF": {
           "propI": "SASDS",
           "propJ": "54DEFF"
         }
       }
     }
   }
]

当我将这个 JSON 反序列化为 List 时,我想对这个对象的一部分做,例如:我想忽略 objB、objC、objD、objE 和 objF。 为此,我使用了 @JsonIgnore 注释。所以我做了这样的事情:

public class MyClass {

// objects and properties not ignorabled
private ClassA objA;
private String propE;
private String propF;
private String propG;;
private String propH;

// objects ignorabled in deserialization 
@JsonProperty("objB")
@JsonIgnore
private Object objB;

@JsonProperty("objD")
@JsonIgnore
private Object objD;

@JsonProperty("objE")
@JsonIgnore
private Object objE;

/** gets and setters here **/

按照下面的反序列化我的 JSON 的代码进行操作

ObjectMapper mapper = new ObjectMapper();
return mapper.readValue(url, new TypeReference<List<MyClass>>(){});

此代码正在运行。此代码忽略来自 JSON 的对象,但我相信还有其他方法可以做到这一点,而不是对我的实体中的每个对象或属性使用 @JsonIgnore。

你知道我怎样才能做得更好吗?

【问题讨论】:

  • 当您在序列化和反序列化期间要排除特定属性时,@JsonIgnore 是一个不错的选择。但是,如果您有更多动态需求,您可以实现自己的自定义反序列化器。 class MyDeser extends StdDeserializer&lt;MyClass&gt;.

标签: java spring spring-boot java-8


【解决方案1】:

你想避免使用@符号吗?

如果没有,您是否尝试过在 Jackson 中使用像 @JsonFilter("myFilter") 这样的过滤器?如此处所述:https://www.baeldung.com/jackson-ignore-properties-on-serialization

另见https://www.tutorialspoint.com/jackson_annotations/jackson_annotations_jsonfilter.htm

所以你必须写:

@JsonFilter("myFilter")
public class MyClass { ... }

在你的课堂上。然后执行以下操作:

SimpleBeanPropertyFilter objBFilter = SimpleBeanPropertyFilter
  .serializeAllExcept("objB");
SimpleBeanPropertyFilter objDFilter = SimpleBeanPropertyFilter
  .serializeAllExcept("objD");
SimpleBeanPropertyFilter objEFilter = SimpleBeanPropertyFilter
  .serializeAllExcept("objE");

FilterProvider filters = new SimpleFilterProvider()
  .addFilter("objBFilter", theFilter)
  .addFilter("objDFilter", theFilter)
  .addFilter("objEFilter", theFilter);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-07
    • 1970-01-01
    • 2013-04-07
    • 2013-07-29
    • 2021-12-18
    相关资源
    最近更新 更多