为了让Gson
在尝试反序列化空String
时抛出异常,this comment建议执行
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.
}
}
答案 0 :(得分:0)
最好使用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