#java #gson
#java #gson
Вопрос:
Для того, чтобы Gson
генерировать исключение при попытке десериализации пустого String
, в этом комментарии предлагается выполнить
gson.getAdapter(Foo.class).fromJson("")
вместо
gson.fromJson("", Foo.class)
Проблема, с которой я сталкиваюсь, заключается в том, что это не работает, когда gson
у рассматриваемого объекта зарегистрирован пользовательский адаптер. Кто-нибудь может предложить другой обходной путь для прохождения этого модульного теста:
@Test
public void testEmptyStringBehavior() {
Gson gson = new GsonBuilder().registerTypeAdapter(Foo.class, new JsonDeserializer<Foo>() {
@Override
public Foo deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
throw new JsonSyntaxException("Never gets here");
}
}).create();
try {
gson.getAdapter(Foo.class).fromJson("");
fail("Expected JsonSyntaxException");
} catch (JsonSyntaxException | IOException e) {
// Expected.
}
}
Ответ №1:
лучше использовать jackson
, а не использовать Gson
, это очень просто.
package parse;
import java.io.IOException;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
public class JsonParsing {
public static void main(String[] args) {
String jsonString = "";
try {
ObjectMapper mapper = new ObjectMapper();
JsonNode node = mapper.readTree(jsonString);
} catch (JsonProcessingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
здесь я использую пустую строку jsonString, с помощью которой она генерирует исключение com.fasterxml.jackson.databind.JsonMappingException: No content to map due to end-of-input
Комментарии:
1. Спасибо за предложение, но на самом деле оно не отвечает на мой вопрос. Для начала, я использую Gson на большой базе кода — не могу просто переключиться на Jackson. Во-вторых, ваш пример десериализуется не в
Foo
объект, а вJsonNode
.