2017-08-05 132 views
1

中识别无效的字段值我在我的应用程序中的Order对象这需要JSON格式如下。GSON反序列化

{ 
    "id" : "1001", 
    "amount" : 100.50 
    "customer" : { 
     "id" : "2001" 
     "name" : "Ned Stark" 
    } 
} 

这表示为以下POJO。

public class Order 
{ 
    private long id; 
    private double amount; 
    private Customer customer; 
} 

我使用GSON来序列化和反序列化这个POJO。一切正常,直到JSON中给出的输入值有效。

但是,当我给在JSON无效的数据类型值,GSON不会抛出特定的容易出错的领域,但只是一个普通的异常的异常,这给应用程序不知道哪个字段值无效。

例如,如果我在JSON中给出数量为“asdf”(而不是有效数字),在反序列化过程中Gson只抛出一个泛型NumberFormatException,但似乎没有提供任何有关异常发生的信息当字段“金额”正尝试设置与输入值。

这将是通常有用的应用程序时,它具有易于错误传达给客户端。我认为在GSON中应该有一些实现。

有没有发现,已经引起反序列化失败的特定字段中的任何格式?

+0

同样的问题,我解决了只是添加对象映射器依赖和使用它转换。你也可以在这里配置多个东西。 – Jango

+0

谢谢Jango。我试过ObjectMapper。这会在JsonMappingException的toString调用中打印字段名称,但它似乎并未将JSON字段作为该异常中的数据公开 - 例如exception.getJSONKeyOfInvalidData() - 以便我可以将此设置为响应JSON中的键客户进行处理。 我在这里错过了什么吗? –

回答

0

而不是依赖于第三方库,你可以写序列之前验证。

这样你对邮件的完全控制,在错误的情况下进行通信。

+0

我只是想过不要重新发明轮子。串行器为我做了转换。我不喜欢在序列化之前迭代所有的JSON密钥,然后让序列化器在序列化的同时执行另一次迭代。 –