Я попытался проанализировать тело запроса в объекте Ship
@PostMapping("/ships")
public Ship createShip(@RequestBody Ship ship){
return ship;
}
И когда объект Ship был десериализован, пружина использовала только значения впрыска для полей. Но я хочу, чтобы весна использовала сеттеры для этих полей.
Я попытался добавить аннотацию @JsonSetter к сеттерам, и она работает хорошо. Но я думаю, что это плохо.
@Entity
public class Ship {
@Id
@GeneratedValue
private Long id;
private String name;
private String planet;
public String getName() {
return name;
}
@JsonSetter
public void setName(String name) {
if(name == null || name == "") throw new IllegalArgumentException("Error while setting name. Can't be null and empty");
if(name.length() > 50) throw new IllegalArgumentException("Error while setting name. Can't be mere than 50 chars");
this.name = name;
}
public String getPlanet() {
return planet;
}
@JsonSetter
public void setPlanet(String planet) {
if(planet == null || planet == "") throw new IllegalArgumentException("Error while setting planet. Can't be null and empty");
if(planet.length() > 50) throw new IllegalArgumentException("Error while setting planet. Can't be mere than 50 chars");
this.planet = planet;
}
}
Возможно, существуют некоторые аннотации, подобные этой:
createShip(@RequestBody(access = METHODS) Ship ship)
или
@Entity
@JsonDeserialize(access=METHODS)
public class Ship {