Очевидно, вы должны понимать, что желаемое представление json предназначено для самого класса Errors
и не содержит только список erros
, поэтому ваш код необходимо настроить, чтобы вы могли передать экземпляр класса Errors
в качестве входных данных для - gson.toJson(...)
Два решения,
Первое решение - сделать Errors
поля и методы нестатичными и передать Errors
экземпляр вместо errors
Список для вызова - gson.toJson(ErrorsInstance);
import java.util.ArrayList;
import java.util.List;
import com.google.gson.Gson;
class Errors {
private List<SingleError> errors = new ArrayList<>();
public List<SingleError> getErrors() {
return errors;
}
public void addError(SingleError singleError) {
errors.add(singleError);
}
Второе решение - если поля и методы нельзя сделать статичными, добавьте новый метод для получения экземпляра Errors
через приватный конструктор, а затем создайте объект Gson
из GsonBuilder
, чтобы статические поля могливключен во время сериализации.
import java.util.ArrayList;
import java.util.List;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
class Errors {
// private constructor
private Errors(List<SingleError> errors) {
Errors.errors = errors;
}
private static List<SingleError> errors = new ArrayList<>();
public static List<SingleError> getErrors() {
return errors;
}
// New method to return Errors instance
public static Errors getErrorsInstance() {
return new Errors(errors);
}
public static void addError(SingleError singleError) {
errors.add(singleError);
}
}
// Включить статические поля во время сериализации и игнорировать только переходные поля - если этого не сделать, то json будет пустым
GsonBuilder gsonBuilder = new GsonBuilder();
// Allowing the serialization of static fields
gsonBuilder.excludeFieldsWithModifiers(java.lang.reflect.Modifier.TRANSIENT);
// Creates a Gson instance based on the current configuration
Gson gson = gsonBuilder.create();
Errors errorsInstance = Errors.getErrorsInstance();
String jsonStringTest = gson.toJson(errorsInstance );
РЕДАКТИРОВАТЬ:
Для второго решения вам не понадобится приватный конструктор и новый метод - getErrorsInstance()
.Вы можете просто кормить new Errors()
до gson.toJson(...)
.То, что вам нужно, это только включение статического поля в десериализации и то же самое будет справедливо и для решения № 1.Таким образом, вам не нужно изменять какой-либо код, просто убедитесь, что с помощью GsonBuilder
статические поля включены, и передайте Errors
экземпляр вместо содержимого списка.