@JsonFormat записывает строку даже с ЧИСЛОВОЙ формой для строкового свойства

#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 используется аннотация, она имеет приоритет.