#java #json #string #jackson
#java #json #строка #джексон
Вопрос:
Даже с NUMBER
формой, почему его строка печати в двойных кавычках?
@JsonFormat(shape = Shape.NUMBER)
private String count;
...
ObjectMapper mapper = new ObjectMapper();
Test test =new Test();
test.setCount("20");
String jsonString = mapper.writeValueAsString(test);
System.out.println(jsonString);
JSON
Результат:
{
"count" : "20"
}
Ответ №1:
@JsonFormat
аннотация — это единственное предложение, и результат зависит от заданного пользовательского сериализатора, который будет использоваться для сериализации заданного значения. В вашем случае com.fasterxml.jackson.databind.ser.std.StringSerializer
будет использоваться для сериализации count
значения. Этот сериализатор не реализует никакого специального поведения. Просто записывает значение как JSON String
. С другой стороны, com.fasterxml.jackson.databind.ser.std.NumberSerializer
уважает @JsonFormat
аннотацию, и если вы установите STRING
форму, она будет выдавать JSON String
вместо JSON Number
.
Итак, вам всегда нужно проверять реализацию сериализатора типов, чтобы ответить на подобные вопросы.
Комментарии:
1. Есть ли способ зарегистрировать, какая реализация используется?
2. @zygimantus, сериализатор, который будет использоваться, зависит от типа свойства. Если
@JsonSerialize
используется аннотация, она имеет приоритет.