Em Jackson, quando você anota um construtor com @JsonCreator
, você deve anotar seus argumentos com @JsonProperty
. Então, este construtor
public Point(double x, double y) {
this.x = x;
this.y = y;
}
torna-se isto:
@JsonCreator
public Point(@JsonProperty("x") double x, @JsonProperty("y") double y) {
this.x = x;
this.y = y;
}
Não entendo porque é necessário. Você pode explicar, por favor?
java
json
serialization
jackson
Ori Popowski
fonte
fonte
Nomes de parâmetros normalmente não são acessíveis pelo código Java em tempo de execução (porque são descartados pelo compilador), então se você quiser essa funcionalidade, você precisa usar a funcionalidade integrada do Java 8 ou usar uma biblioteca como ParaNamer para obter acesso para isso.
Portanto, para não ter que utilizar anotações para os argumentos do construtor ao usar Jackson, você pode fazer uso de um destes dois módulos Jackson:
jackson-module-parameter-names
Este módulo permite que você obtenha argumentos de construtor sem anotação ao usar Java 8 . Para usá-lo, você primeiro precisa registrar o módulo:
Em seguida, compile seu código usando a sinalização -parameters:
Link: https://github.com/FasterXML/jackson-modules-java8/tree/master/parameter-names
jackson-module-paranamer
Este outro simplesmente requer que você registre o módulo ou configure uma introspecção de anotação (mas não ambos como apontado pelos comentários). Ele permite que você use argumentos de construtor sem anotação em versões de Java anteriores a 1.8 .
Link: https://github.com/FasterXML/jackson-modules-base/tree/master/paranamer
fonte
É possível evitar anotações do construtor com jdk8 onde opcionalmente o compilador irá introduzir metadados com os nomes dos parâmetros do construtor. Então, com o módulo jackson-module-parameter-names , Jackson pode usar este construtor. Você pode ver um exemplo no post Jackson sem anotações
fonte
Porque o bytecode Java não retém os nomes dos argumentos do método ou do construtor.
fonte
@JsonProperty
anotaçãoPode-se simplesmente usar a anotação java.bean.ConstructorProperties - é muito menos prolixa e Jackson também a aceita. Por exemplo :
fonte
Quando eu entendi isso corretamente, você substitui o construtor padrão por um parametrizado e, portanto, tem que descrever as chaves JSON que são usadas para chamar o construtor com.
fonte
Conforme especificado na documentação da anotação , a anotação indica que o nome do argumento é usado como o nome da propriedade sem nenhuma modificação, mas pode ser especificado como um valor não vazio para especificar um nome diferente:
fonte
Basta encontrar e obter uma resposta em algum lugar. você pode usar a anotação abaixo desde 2.7.0
fonte