#java #json #spring #spring-boot
#java #json #spring #весенняя загрузка
Вопрос:
У меня есть pojo, в котором много полей. Я установил значение некоторого поля. Но когда я создаю json, весь pojo создает json. вот код, который я использовал:
-
Pojo
public class BasicInfoModel { private String client_id=""; private String father_name=""; private String mother_name=""; private String gendar=""; //Getter and setter }
-
Код репозитория
public BasicInfoModel getBasicInfo() { BasicInfoModel lm = new BasicInfoModel(); lm.setFather_name("Enamul Haque"); return lm; }
-
Код контроллера
@RequestMapping(value = "/get_donar_basic_info", method = RequestMethod.POST, produces ="application/json") public @ResponseBody BasicInfoModel getBasicinfo(){ return repository.getBasicInfo(); }
-
Но мой json соответствует приведенному ниже:
{ "client_id": "", "father_name": "Enamul Haque", "mother_name": "", "gendar": "" }
Я установил значение в father_name, но я увидел, что нашел все значения полей pojo. Я хочу получить только установленное значение father_name и игнорировать другое значение, которое не задано в репозитории.
-
Мой json выглядит следующим образом: я буду отображать только father_name.как отобразить нижеприведенный код в формате json из приведенного выше кода?
{ "father_name": "Enamul Haque" }
Пожалуйста, помогите мне..
Ответ №1:
Json включает ненулевые значения, чтобы игнорировать нулевые поля при сериализации класса Java
@JsonInclude(Include.NON_NULL)
Джексон позволяет контролировать это поведение на любом уровне класса:
@JsonInclude(Include.NON_NULL)
public class BasicInfoModel { ... }
на уровне поля:
public class BasicInfoModel {
private String client_id="";
@JsonInclude(Include.NON_NULL)
private String father_name="";
private String mother_name="";
private String gendar="";
//Getter and setter
}
из jackson 2.0 используйте здесь используйте
@JsonInclude(JsonInclude.Include.NON_NULL)
Вы также можете игнорировать пустые значения
@JsonInclude(JsonInclude.Include.NON_EMPTY)
Комментарии:
1. @JsonInclude(JsonInclude. Include.NON_NULL) работает нормально. Если я установлю пустое значение, например lm.setMother_name(«»); что произойдет тогда.
2. вы также можете игнорировать пустые значения
JsonInclude.Include NON_EMPTY
@EnamulHaque3. спасибо, возможно ли в этом репозитории.метод getBasicInfo() отображает json, который добавлен в этот метод, а другое поле будет игнорироваться
4. что плохого в добавлении этого в класс POJO? @EnamulHaque
5. когда-нибудь мне понадобится json типа {«father_name»: «Enamul Haque», «mother_name»: «»}, если я использую уровень класса, он игнорирует все пустое значение. я хочу избежать того, чтобы все остальные поля не добавлялись в метод getBasicInfo ().
Ответ №2:
Добавьте аннотацию @JsonIgnoreProperties («имя_поля») к вашему POJO.
Или вы можете использовать @JsonIgnore перед именем поля, которое вы хотите игнорировать при десериализации JSON. Пример:
@JsonIgnore
@JsonProperty(value = "client_id")
@RequestMapping(value = "/get_donar_basic_info", method = RequestMethod.POST, produces ="application/json")
public @ResponseBody BasicInfoModel getBasicinfo(){
return repository.getBasicInfo();
}
Ответ №3:
Вы можете игнорировать поле на уровне класса, используя аннотацию@JsonIgnoreProperties и указывая поля по имени:
@JsonIgnoreProperties(value = { "client_id" })
public class BasicInfoModel {
private String client_id="";
private String father_name="";
private String mother_name="";
private String gendar="";
//Getter and setter
}
Или вы можете использовать аннотацию @JsonIgnore непосредственно в поле.
public class BasicInfoModel {
@JsonIgnore
private String client_id="";
private String father_name="";
private String mother_name="";
private String gendar="";
//Getter and setter
}
Подробнее об этом вы можете прочитать здесь.
Комментарии:
1. неоднозначный ответ. Можете ли вы уточнить и предоставить свои ссылки? TIA 🙂
2. Отредактировал мой ответ. Надеюсь, это развеет ваши сомнения 🙂