#java #spring-boot #spring-mvc #jackson
#java #spring-boot #spring-mvc #джексон
Вопрос:
У меня есть класс с именем Customer
Customer{
private int ID;
private IDCard idCard;
}
и IDCard.Java
IDCard{
private int id;
private int score;
}
У меня есть две конечные точки, endpoint01 и endpoint02.
Поэтому, когда я добавляю клиента, используя endpoint01, предоставление оценки является обязательным. Но когда я добавляю клиента, используя endpoint02, оценка не является обязательной.
Поскольку я использую одну и ту же модель клиента в обоих методах контроллера конечной точки, Джексон выдает ошибку, потому что в endpoint02 я не предоставил оценку. В этом случае ясно, что я не могу применить игнорирование json в моей модели IDcard. Итак, как я могу указать моему endpoint02 игнорировать поле оценки, если оно отсутствует, и десериализовать, только если поле присутствует в объекте json.
Это мой endpoint02
@RequestMapping(method=RequestMethod.POST, value="/add",headers="Accept=application/json")
public @ResponseBody Map<String,List<String>> add(@RequestBody Customer customer) {
return customerSvc.add(customer);
}
Ответ №1:
то, что вы хотите, это аннотации на вашем POJO, а не на вашей конечной точке
IDCard{
@JsonProperty(vaue="id" , required=false)
private int id;
@JsonProperty(vaue="score" , required=false)
private int score;
}
это позволит избежать ваших полей при десериализации объекта.
Примечание: позаботьтесь об инкапсуляции.
Ответ №2:
Вы можете применить аннотацию игнорирования к определенному свойству.