lombok.copyableAnnotations de Lombok que no trabajan con anotaciones Jackson

fugigoose:

Estoy tratando de hacer uso de nuevo de Lombok copyableAnnotationsfunción con el fin de tener anotaciones de Jackson como @JsonIgnorey @JsonValuecopiado a / métodos getter debilitar hace generados. Este blog parece sugerir que esto debería funcionar: https://www.thecuriousdev.org/lombok-builder-with-jackson/ . Sin embargo, cuando intento esto simplemente me sale "error: tipo de anotación no aplicable a este tipo de declaración" (señalando a mi valuecampo). ¿Por qué esto no funciona y cómo puedo hacer que funcione? Tal vez estoy malentendido cómo esta función se supone que funciona. Estoy usando Lombok 1.18.8.

model.java:

import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonValue;
import lombok.Value;

import javax.validation.constraints.NotNull;

@Value
public class BrandId implements ValueObject<Long> {

    @JsonCreator
    public static BrandId of(final Long value) {

        return new BrandId(value);
    }

    @NotNull
    @JsonValue
    private Long value;
}

lombok.config:

config.stopBubbling = true

lombok.copyableAnnotations += com.fasterxml.jackson.annotation.JsonIgnore
lombok.copyableAnnotations += com.fasterxml.jackson.annotation.JsonProperty
lombok.copyableAnnotations += com.fasterxml.jackson.annotation.JsonValue
ruakh:

¿Por qué esto no funciona [...]?

La @JsonValueanotación sólo se permite en declaraciones de métodos y en las declaraciones de otros tipos de anotación; por lo que, con o sin Lombok, no se puede poner en un campo. (Si nos fijamos en su Javadoc , verá que está anotado con @Target(value={ANNOTATION_TYPE,METHOD}).)

La buena noticia es que @JsonValuesólo se aplica a los métodos getter (métodos no setter, métodos constructor, etc.), y no puede haber sólo una de ella por clase, así que no es un gran problema para simplemente crear manualmente que un comprador:

    @NotNull
    private Long value;

    @JsonValue
    public Long getValue() {
        return value;
    }

Si realmente no les gusta eso, entonces se puede utilizar experimental de Lombok onMethodfunción:

    @NotNull
    @Getter(onMethod=@__({@JsonValue}))
    private Long value;

que es equivalente a la anterior excepto en ser experimental (por lo que puede cambiar o desaparecer en futuras versiones de Lombok y / o Java).

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=214086&siteId=1
Recomendado
Clasificación