Самые популярные вопросы и ответы для интервью и онлайн-тесты
Образовательная платформа для подготовки к интервью, онлайн-тестов, учебных материалов и живой практики

Развивайте навыки с целевыми маршрутами обучения, пробными тестами и контентом для подготовки к интервью.

WithoutBook объединяет вопросы для интервью по предметам, онлайн-практику, учебные материалы и сравнительные руководства в одном удобном учебном пространстве.

Подготовка к интервью

Google Gson вопросы и ответы для интервью

Вопрос 6. How to custom Serialization and De-serialization in Gson?

Many times, we need to write/read the JSON values which are not default representation of java object. In that case, we need to write custom serializer and deserializer of that java type.

In our example, I am writing serializer and deserializer for java.util.Date class, which will help writing the Date format in "dd/MM/yyyy" format.

DateSerializer.java
import java.lang.reflect.Type;
import java.text.SimpleDateFormat;
import java.util.Date;
 
import com.google.gson.JsonElement;
import com.google.gson.JsonPrimitive;
import com.google.gson.JsonSerializationContext;
import com.google.gson.JsonSerializer;
 
public class DateSerializer implements JsonSerializer<Date>
{
   private static final SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
   public JsonElement serialize(Date date, Type typeOfSrc, JsonSerializationContext context)
   {
      return new JsonPrimitive(dateFormat.format(date));
   }
}

DateDeserializer.java
import java.lang.reflect.Type;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
 
import com.google.gson.JsonDeserializationContext;
import com.google.gson.JsonDeserializer;
import com.google.gson.JsonElement;
 
public class DateDeserializer implements JsonDeserializer<Date>
{
   private static final SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
   public Date deserialize(JsonElement dateStr, Type typeOfSrc, JsonDeserializationContext context)
   {
      try
      {
         return dateFormat.parse(dateStr.getAsString());
      } 
      catch (ParseException e)
      {
         e.printStackTrace();
      }
      return null;
   }
}

Now you can register these serializer and deserializer with GsonBuilder as below:

GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.registerTypeAdapter(Date.class, new DateSerializer());
gsonBuilder.registerTypeAdapter(Date.class, new DateDeserializer());

Complete example of serializer and deserializer is as below:
Employee employee = new Employee();
employee.setId(1);
employee.setFirstName("Arindam");
employee.setLastName("Ghosh");
employee.setRoles(Arrays.asList("FINANCE", "MANAGER"));
employee.setBirthDate(new Date());
 
GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.registerTypeAdapter(Date.class, new DateSerializer());
gsonBuilder.registerTypeAdapter(Date.class, new DateDeserializer());
Gson gson = gsonBuilder.create();
 
//Convert to JSON
System.out.println(gson.toJson(employee));
 
//Convert to java objects
System.out.println(gson.fromJson("{'id':1,'firstName':'Arindam','lastName':'Ghosh','roles':['FINANCE','MANAGER'],'birthDate':'17/06/2014'}", Employee.class));
                             
Output:

{

    "id":1,

    "firstName":"Bob",

    "lastName":"Richardson",

    "roles":["FINANCE","MANAGER"],

    "birthDate":"17/06/2014"

}

Employee [id=1, firstName=Arindam, lastName=Ghosh, roles=[FINANCE, MANAGER], birthDate=Tue Jun 17 00:00:00 IST 2014]

Это полезно? Добавить комментарий Посмотреть комментарии
 

Вопрос 7. How to provide Pretty Printing for JSON Output Format?

The default JSON output that is provide by Gson is a compact JSON format. This means that there will not be any white-space in the output JSON structure. To generate a more readable and pretty looking JSON use setPrettyPrinting() in GsonBuilder.

Gson gson = new GsonBuilder().setPrettyPrinting().create();
String jsonOutput = gson.toJson(employee);
 
Output:

{
  "id": 1,
  "firstName": "Lokesh",
  "lastName": "Gupta",
  "roles": [
    "ADMIN",
    "MANAGER"
  ],
  "birthDate": "17/06/2014"
}

Это полезно? Добавить комментарий Посмотреть комментарии
 

Вопрос 8. What is Versioning Support in Gson?

This is excellent feature you can use, if the class file you are working has been modified in different versions and fields has been annotated with @Since. All you need to do is to use setVersion() method of GsonBuilder.

GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.registerTypeAdapter(Date.class, new DateSerializer());
gsonBuilder.registerTypeAdapter(Date.class, new DateDeserializer());
//Specify the version like this
gsonBuilder.setVersion(1.0);
Gson gson = gsonBuilder.create();

Fields added in various versions in Employee.java
public class Employee
{
   @Since(1.0)
   private Integer id;
   private String firstName;
   private String lastName;
    
   @Since(1.1)
   private List<String> roles;
    
   @Since(1.2)
   private Date birthDate;
    
   //Setters and Getters
}

Now test the version feature:
//Using version 1.0 fields
gsonBuilder.setVersion(1.0);
 
Output:

{

    "id":1,

    "firstName":"Bob",

    "lastName":"Richardson"

}

  
//Using version 1.1 fields
gsonBuilder.setVersion(1.1);
 
Output:

{

    "id":1,

    "firstName":"Bob",

    "lastName":"Richardson",

    "roles":["FINANCE","MANAGER"]

}

  
//Using version 1.2 fields
gsonBuilder.setVersion(1.2);
 
Output:

{

    "id":1,

    "firstName":"Bob",

    "lastName":"Richardson",

    "roles":["FINANCE","MANAGER"],

    "birthDate":"17/06/2014"

}

Это полезно? Добавить комментарий Посмотреть комментарии
 

Самое полезное по оценкам пользователей:

Авторские права © 2026, WithoutBook.