Pues para lo de Jackson.
Lo "normal" es que las librerías usen las propiedades directamente con reflection (o con Unsafe, si se es un valiente) para sacar las propiedades en vez de los getters/setters. La cosa es que como esto la gente no lo sabe pues te llega el novato de turno a agregar un inocente método del tipo
public boolean isAwesome() {
return this.awesomeString.equals("awesome");
}
Y la próxima vez en el JSON te va a meter la propiedad "awesome" y "awesomeString" porque todos sabemos que los getters/setters son la manera cool de hacer las cosas. El caso es que cuando lo vayas a deserializar te va a decir que no conoce el setter de la propiedad awesome porque es calculada y te hará explotar todo.
Que no quieres que pase esto? Añade @JsonIgnore a todos los métodos (getters calculados) que quieras o a la clase, suerte intentando reescribir algo de código que no soporta Jackson desde el principio (y si, me ha pasado y está pasando ahora mismo)
La alternativa? Pues sinceramente hace tiempo que directamente no uso JSON en proyectos personales como tal, para mierdas de configuración puede venir bien (aunque prefiero HOCON) pero para todo lo demás (g)RPC. Y si no queda más remedio porque es una api que consumirán otras personas que prefieren json pues lo que venga con el framework de turno, shit happens.