Игнорировать поля POJO json, не отображенные в объекте при загрузке spring

#java #json #spring #spring-boot

#java #json #spring #весенняя загрузка

Вопрос:

У меня есть pojo, в котором много полей. Я установил значение некоторого поля. Но когда я создаю json, весь pojo создает json. вот код, который я использовал:

  1. Pojo

     public class BasicInfoModel  {
      private String client_id="";
      private String father_name="";
      private String mother_name="";        
      private String gendar="";
     //Getter and setter
     }
      
  2. Код репозитория

      public BasicInfoModel getBasicInfo() {
        BasicInfoModel lm = new BasicInfoModel();
        lm.setFather_name("Enamul Haque");
        return lm;
       }
      
  3. Код контроллера

       @RequestMapping(value = "/get_donar_basic_info", method = RequestMethod.POST, produces ="application/json")   
      public @ResponseBody BasicInfoModel getBasicinfo(){
       return repository.getBasicInfo();
      }
      
  4. Но мой json соответствует приведенному ниже:

     {
    "client_id": "",
    "father_name": "Enamul Haque",
    "mother_name": "",
    "gendar": ""
    }
      

    Я установил значение в father_name, но я увидел, что нашел все значения полей pojo. Я хочу получить только установленное значение father_name и игнорировать другое значение, которое не задано в репозитории.

  5. Мой 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 @EnamulHaque

3. спасибо, возможно ли в этом репозитории.метод 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. Отредактировал мой ответ. Надеюсь, это развеет ваши сомнения 🙂