Мне нужно сериализовать поле Double, содержащее NaN число, но Джексон всегда пытается записать его как String, например. "value": "Nan". Как я могу изменить его на "value": Nan вместо этого?
Ниже приведен код для воспроизведения:
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.json.JsonReadFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
public class Test {
public String name;
public int age;
private int favoriteNumber;
private Double value = Double.NaN;
public Test(String name, int age, int favoriteNumber) {
this.name = name;
this.age = age;
this.favoriteNumber = favoriteNumber;
}
@JsonProperty
public String getFavoriteNumber() {
return String.valueOf(favoriteNumber);
}
@JsonProperty
public Double getValue() {
return this.value;
}
public static void main(String... args) throws Exception {
Test p = new Test("Joe", 25, 123);
ObjectMapper mapper = new ObjectMapper();
mapper.enable(JsonReadFeature.ALLOW_NON_NUMERIC_NUMBERS.mappedFeature());
mapper.configure(JsonParser.Feature.ALLOW_NON_NUMERIC_NUMBERS, true);
System.out.println(mapper.writeValueAsString(p));
// {"name":"Joe","age":25,"favoriteNumber":"123","value":"NaN"}
}
}




Это невозможно, потому что NaN не является допустимым значением JSON. Вы можете попробовать преобразовать его в null в своем методе получения.
Добавьте аннотацию @JsonRawValue, вот так
@JsonProperty
@JsonRawValue
public Double getValue() {
return this.value;
}
Это даст вам этот результат
{"name":"Joe","age":25,"favoriteNumber":"123","value":NaN}