Estoy tratando de hacer uso de nuevo de Lombok copyableAnnotations
función con el fin de tener anotaciones de Jackson como @JsonIgnore
y @JsonValue
copiado 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 value
campo). ¿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
¿Por qué esto no funciona [...]?
La @JsonValue
anotació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 @JsonValue
só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 onMethod
funció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).