使用Gson解析空字符串将返回null而不是抛出JsonSyntaxException

时间:2016-10-06 14:15:50

标签: java gson

为了让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.
    }
}

1 个答案:

答案 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