В Джексоне, когда вы аннотируете конструктор с помощью @JsonCreator
, вы должны аннотировать его аргументы с помощью @JsonProperty
. Итак, этот конструктор
public Point(double x, double y) {
this.x = x;
this.y = y;
}
становится это:
@JsonCreator
public Point(@JsonProperty("x") double x, @JsonProperty("y") double y) {
this.x = x;
this.y = y;
}
Я не понимаю, зачем это нужно. Не могли бы вы объяснить?
java
json
serialization
jackson
Ори Поповски
источник
источник
Имена параметров обычно недоступны для кода Java во время выполнения (потому что они отбрасываются компилятором), поэтому, если вам нужна эта функциональность, вам нужно либо использовать встроенную функциональность Java 8, либо использовать библиотеку, такую как ParaNamer, чтобы получить доступ. к нему.
Поэтому, чтобы не использовать аннотации для аргументов конструктора при использовании Джексона, вы можете использовать любой из этих двух модулей Джексона:
имена-параметров-модуля-Джексона
Этот модуль позволяет получать аргументы конструктора без аннотаций при использовании Java 8 . Чтобы использовать его, вам сначала необходимо зарегистрировать модуль:
Затем скомпилируйте свой код, используя флаг -параметры:
Ссылка: https://github.com/FasterXML/jackson-modules-java8/tree/master/parameter-names
Джексон-модуль-параметр
Этот другой просто требует, чтобы вы зарегистрировали модуль или настроили самоанализ аннотации (но не то и другое, как указано в комментариях). Он позволяет использовать аргументы конструктора без аннотаций в версиях Java до 1.8 .
Ссылка на сайт: https://github.com/FasterXML/jackson-modules-base/tree/master/paranamer
источник
Можно избежать аннотаций конструктора с помощью jdk8, где необязательно компилятор будет вводить метаданные с именами параметров конструктора. Затем с модулем jackson-module-parameter-names Джексон может использовать этот конструктор. Вы можете увидеть пример в посте Джексона без аннотаций
источник
Поскольку байт-код Java не сохраняет имена аргументов метода или конструктора.
источник
@JsonProperty
аннотациюМожно просто использовать аннотацию java.bean.ConstructorProperties - она намного менее многословна, и Джексон также ее принимает. Например :
источник
Когда я понимаю , это правильно, вы замените конструктор по умолчанию с параметризованным один и , следовательно , должны описать ключи JSON , которые используются для вызова конструктора с.
источник
Как указано в документации по аннотации , аннотация указывает, что имя аргумента используется как имя свойства без каких-либо изменений, но для него можно указать непустое значение, чтобы указать другое имя:
источник
Просто наткнулся на это и где-то получил ответ. вы можете использовать аннотацию ниже, начиная с 2.7.0
источник