The Jackson JSON library looks for those anontations to know what JSON fields exist for serialization (conversion from java object to string), or deserialization (conversion from string to java object).
The support for annotating both fields and methods is a convenience to support different configurations that developers may have. With that said, best practice is to use model objects that have the "properties" (i.e. fields) with getters and setters that use standard naming. When following this practice, the developer can choose to annotate either the fields or the methods.
An example why you might need to anotate a method and not a field - if you have an object that inherits a protected field from a base-class and cannot add the annotation to the base class. In that case, you can add a getter for the field to the derived class and annotate it instead. But please only do this if you cannot follow the best-practice.