Jackson 在 Quarkus 应用程序的 API 响应中忽略自定义的 ObjectMapper

问题描述 投票:0回答:1

我有带有 REST API 的 Qurakus 应用程序

@Path("/hello")
public class ExampleResource {

    @GET
    @Consumes(MediaType.APPLICATION_JSON)
    public ObjectNode hello() throws JsonProcessingException {
        ObjectMapper objectMapper = new ObjectMapper();
        String str = "{\"var\": 0.000000009}";
        ObjectNode object = (ObjectNode) objectMapper.readTree(str);
        return object;
    }
}

使用定制的 Jackson ObjectMapper 如下:

@Singleton
public class RegisterCustomModuleCustomizer implements ObjectMapperCustomizer {
    public void customize(ObjectMapper mapper) {
        mapper.enable(JsonGenerator.Feature.WRITE_BIGDECIMAL_AS_PLAIN);
    }
}

在响应过程中,Jackson 没有调用自定义的 ObjectMapper,因此返回的值以科学计数法表示。

如果我使用下面的 POJO 进行响应,Jackson 会根据需要调用自定义的 ObjectMapper。

public class Entity {

    public Entity() {
    }

    public Entity(BigDecimal value) {
        this.value = value;
    }

    public BigDecimal value;

    public BigDecimal getValue() {
        return value;
    }

    public void setValue(BigDecimal value) {
        this.value = value;
    }
}

为什么 Jackson 忽略自定义的 ObjectMapper?

Jackson需要调用自定义的ObjectMapper。

java jackson jax-rs quarkus objectmapper
1个回答
0
投票

ObjectMapperCustomizer
的实现仅适用于由CDI管理的
ObjectMapper
类(这意味着它们不适用于在代码的随机部分使用
new
创建的实例)

© www.soinside.com 2019 - 2024. All rights reserved.