当前位置: 首页 > 知识库问答 >
问题:

如何配置Jackson ObjectMapper,以便在bean的某些字段为NULL时使用自定义值序列化这些字段?

朱博实
2023-03-14
public class Product {

    private String thumbnailUrl;    

   // many other properties, some of which are POJOs or collections

    public String getThumbnailUrl() {
        return thumbnailUrl;
    }

    public void setThumbnailUrl(String thumbnailUrl) {
        this.thumbnailUrl = thumbnailUrl;
    }
}

ThumbnailURL属性有时可以为null。如何配置ObjectMapper将此字段序列化为http://www.example.com/unknowled.png,如果它是null

我认为我不能使用mixins,因为mixins不能访问原始对象,因此它们不能检查属性的值是否为null

共有1个答案

陈龙野
2023-03-14

这应该能起到作用:

私有字符串thumbnailUrl=“http://my.default.url”;

正如注释中提到的OP,类来自第三方库,所以修改它(a'la this so)或注释(a'la this so)不是一个选项。在这种情况下,您还有两个选择:

@Override
public void serialize(Product value, JsonGenerator jgen, SerializerProvider provider) 
  throws IOException, JsonProcessingException {
    boolean revert = false;
    if (value.thumbnailUrl == null) {
      value.thumbnailUrl = "http://my.default.url";
      revert = true;
    }
    jgen.writeObject(value);
    if (revert) {
      value.thumbnailUrl = null;
    }
}
 类似资料:
  • 问题内容: 有没有一种使用Jackson JSON Processor进行自定义字段级序列化的方法?例如,我想上课 序列化为以下JSON: 请注意,age = 25被编码为 数字, 而favoriteNumber = 123被编码为 string 。开箱即用的杰克逊将集结到一个号码。在这种情况下,我希望将favoriteNumber编码为字符串。 问题答案: 您可以实现自定义序列化器,如下所示:

  • 我使用Gson与改造。我的服务器接受空值,所以在我给的gson构建器 这样就不会忽略空值。但是在一些s中,我有一个特殊的情况,其中一些字段应该存在,即使是它的null,而其他一些字段如果是null也不应该序列化。 例如,如果我有一个请求类,比如 如果我有一个请求,其中和,应该将其序列化如下: 这意味着,如果type为null,它应该忽略该字段,但是如果id为null,它应该在请求中显示为null。

  • 我试图使用Gson自定义序列化将以下类序列化为Json。

  • 我有一个产生JSON的控制器,从这个控制器,我返回一个实体对象,它由Jackson自动序列化。 现在,我想避免根据传递给控制器的参数返回一些字段。我查看了使用过滤器属性/Mixins等完成此操作的示例。但是我看到的所有示例都要求我使用对象映射器手动序列化/反序列化 Bean。有没有办法在没有手动序列化的情况下执行此操作?我的代码与此类似: 现在,根据传递给控制器的“变量”值,我想显示/隐藏MyEn

  • 我有一个大的嵌套对象。我想在JSON字符串中序列化这个对象,但是我只需要包含某些字段。这里的问题是字段可能会非常频繁地更改,我希望以一种可以帮助我轻松包含或排除用于序列化的字段的方式来构建它。 我知道我可以编写很多代码来提取某些字段并“手动”构建JSON。但我想知道,除了指定一个必填字段列表之外,是否还有其他优雅的方法可以实现类似的结果? 例如,我希望在响应中只包含和以下对象结构: Json:

  • 我知道这是一个非常简单的问题,但我似乎找不到一个令人满意的答案。另外,我对Mongo完全是个新手。这显然无济于事。 假设我收藏了...我希望将mongo中的$toupper函数应用于具有_id和的记录的字段,而不是应用于具有的记录。 我一直在玩Mongo的聚合(针对我在google中发现的),但我得到的最多的是一个返回“name”字段的查询,但是: 它返回数据库中的所有记录(不仅是ObjectId