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

Jackson ObjectMapper设置JsonFormat。形状不带注释的数组

公孙令秋
2023-03-14

我需要使用两个jackson 2对象映射器。两个映射器都使用同一组类。首先,我需要使用标准序列化。在第二个例子中,我想对所有类使用数组形状类型(请参见https://fasterxml.github.io/jackson-annotations/javadoc/2.2.0/com/fasterxml/jackson/annotation/JsonFormat.Shape.html#ARRAY).

但是我想为我的第二个ObjectMapper全局设置这个特性。类似mapper的东西。设置形状(…)

怎么做呢?

UPD:

我找到了一种覆盖类配置的方法

mapper.configOverride(MyClass.class)
   .setFormat(JsonFormat.Value.forShape(JsonFormat.Shape.ARRAY));

因此,我可以使用反射API更改我的所有类。

很尴尬,我覆盖了全局设置,但我不能直接设置它。

共有1个答案

印辉
2023-03-14

由于注释在字段上工作,所以不能将其设置为形状。全局级别的数组。这意味着所有字段都将被序列化并反序列化为数组值(想象一下,如果一个字段已经是一个列表,在这种情况下,它将被包装到另一个列表中,这可能是我们不想要的)。

但是,您可以为类型编写自己的序列化程序(将值转换为数组),并在ObjectMapper中进行配置,例如:

class CustomDeserializer extends JsonSerializer<String>{

    @Override
    public void serialize(String value, JsonGenerator gen, SerializerProvider serializers)
            throws IOException, JsonProcessingException {
        gen.writeStartArray();
        gen.writeString(value);
        gen.writeEndArray();
    }
}

并将其配置为ObjectMaper实例,例如:

ObjectMapper mapper = new ObjectMapper();
SimpleModule module = new SimpleModule();
module.addSerializer(String.class, new CustomDeserializer());
mapper.registerModule(module);
 类似资料:
  • 我正在使用jackson库,我遇到了一种情况,我想在序列化/反序列化时使用对象映射器禁用@JsonFormat注释。 我的Api代码在第三方库中,所以我不能删除/添加任何注释,所以objectMapper是唯一的选择。 Api类别: 我的代码: 我希望这种转换成功发生。 目前我得到了:com.fasterxml.jackson.databind。JsonMappingException:格式无效:

  • 后端实体类使用了@jsonformat注释,但在前端获取数据时24-hour和12hour中的时间格式似乎存在问题。例如,后端时间为2021-5-21 00:50,但发送到前端的时间变成了2021-5-21 12:50。是@jsonformat的属性设置有问题还是前端。

  • 我正在我的gradle项目中使用。自从将添加到我的项目构建文件后,我在运行gradle项目时遇到了这个异常。这里是我的错误的堆栈跟踪。 我在我的类中使用了未使用的。但是我确实有和注释,它们使用两个类来序列化和反序列化我的到UTC格式的Json和从Json到Json的。我是第一次做这个序列化和反序列化,所以请给出任何建议。 这是我的分级文件代码:

  • 何时才能可靠地知道设置了新创建实体的字段,该字段带有注释? JPA规范对此并不是很具体。我见过类似的问题,但他们得到的答案却不一样,令人困惑。我知道一旦事务被提交,id就已经设置好了,但是如果事务还在运行,而我需要id怎么办呢? 我怎样才能可靠地得到它?

  • 我在想一个一般的请求映射问题。在不选择任何特定MVC框架的情况下,将基于注释的请求映射与简单的参数检查器映射进行比较,哪一个更好? 假设我想创建一个web服务,它应该处理例如“添加”和“删除”操作。 使用注释,它看起来像这样: 使用参数,它将如下所示: 在第二个示例中,假设Operation对象是从JSON对象构建的。我们的想法是,我们只有一个通用的操作,它有一个类型参数,我们总是调用相同的请求(

  • 我有一个可用于注释的方面: 连接点: 我可以在具有