Преобразование Float в Int в Jackson ObjectMapper: методы и примеры

Jackson – популярная библиотека Java, используемая для обработки JSON. Он предоставляет класс ObjectMapper, который позволяет разработчикам преобразовывать данные JSON в объекты Java и наоборот. В некоторых случаях вы можете столкнуться с ситуациями, когда вам необходимо преобразовать значение с плавающей запятой в целое число с помощью ObjectMapper Джексона. В этой статье мы рассмотрим различные методы выполнения этой задачи на примерах кода.

Метод 1: использование метода setDeserializationFeature()

ObjectMapper objectMapper = new ObjectMapper();
objectMapper.configure(DeserializationFeature.ACCEPT_FLOAT_AS_INT, true);
// JSON input
String json = "{\"value\": 10.5}";
// Deserializing JSON to a custom object
CustomObject obj = objectMapper.readValue(json, CustomObject.class);
// The float value will be converted to an integer
int value = obj.getValue();

Метод 2: собственный десериализатор

public class FloatToIntDeserializer extends JsonDeserializer<Integer> {
    @Override
    public Integer deserialize(JsonParser jsonParser, DeserializationContext ctxt) throws IOException {
        float floatValue = jsonParser.getFloatValue();
        int intValue = (int) floatValue;
        return intValue;
    }
}
// Usage
ObjectMapper objectMapper = new ObjectMapper();
SimpleModule module = new SimpleModule();
module.addDeserializer(Integer.class, new FloatToIntDeserializer());
objectMapper.registerModule(module);
// JSON input
String json = "{\"value\": 10.5}";
// Deserializing JSON to a custom object
CustomObject obj = objectMapper.readValue(json, CustomObject.class);
// The float value will be converted to an integer
int value = obj.getValue();

Метод 3. Использование аннотации @JsonSetter

public class CustomObject {
    private int value;
    @JsonSetter
    public void setValue(float value) {
        this.value = (int) value;
    }
    public int getValue() {
        return value;
    }
}
// Usage
ObjectMapper objectMapper = new ObjectMapper();
// JSON input
String json = "{\"value\": 10.5}";
// Deserializing JSON to a custom object
CustomObject obj = objectMapper.readValue(json, CustomObject.class);
// The float value will be converted to an integer
int value = obj.getValue();

В этой статье мы рассмотрели три различных метода преобразования значения с плавающей запятой в целое число с помощью ObjectMapper Джексона. Настроив ObjectMapper для приема значений с плавающей запятой в виде целых чисел, создав собственный десериализатор или используя аннотацию @JsonSetter, вы можете легко обрабатывать такие преобразования. Эти методы обеспечивают гибкость и позволяют адаптировать обработку JSON в соответствии с вашими конкретными требованиями.