我正在创建一个自定义Jackson反序列化器类来将JSON负载映射到一个对象。在我的deserialize
方法中,我对JSON负载进行了一些检查,以查看是否缺少任何字段或与POJO不一致。
我尝试在deserialize
方法中抛出异常,方法如下所示:
@Override
public MyObject deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException, JsonProcessingException {
// if some fields are missing throw error:
throw new MissingFieldsException("name field is missing");
}
但是,我不允许在deserialize
方法中抛出我自己的异常,因为该方法实现了一个接口,我只能抛出IOException
和JSONProcessingException
:
public abstract T deserialize(JsonParser p, DeserializationContext ctxt)
throws IOException, JsonProcessingException;
在这种情况下,当执行反序列化时,如何验证JSON有效负载?
确切地说,JSONProcessingException
类不受“保护”。该类的构造函数是。因此您可以很容易地扩展该类--正如注释所建议的那样--使用一些公共构造函数,例如:
@SuppressWarnings("serial")
public static class MyJsonProcessingException extends JsonProcessingException {
protected MyJsonProcessingException(String msg) {
super(msg);
}
}
还可以通过为主体提供new
运算符将其声明为匿名内部类。如:
throw new JsonProcessingException("Error msg") {};
为此,您可能还需要添加以下内容:
private static final long serialVersionUID = 1L;
@SuppressWarnings("serial")
public static class MyJsonProcessingRuntimeException extends RuntimeException {}
但是在runtimeexception
的情况下,您需要在编码时更加小心--所以要注意它可以在没有任何声明的情况下抛出--所以最好扩展JSONProcessingException
。
我在使用Jackson1.9.13(和Jackson2.5.0)进行序列化/反序列化时遇到了一个问题,现在已经解决了几天了,没有任何成功。 我的目标是使用@jsonanygetter&@jsonanysetter,我想动态地计算对象是否应该写入输出。我有一个用ObjectMapper序列化的JSON定义(并检查是否应该包含对象),然后将对象转换回字符串。 为此,我使用了一个“HidableSeri
我找不到为什么我从Jacksoin得到一个异常,即使一切看起来都很好。 我有以下JSON: 以及我需要将Json反序列化为: 我不明白为什么这个例外。字段deviceId与@jsonproperty(“device_id”)映射,我有setter和getter,但我仍然是一个错误。 更新 我做了以下更改:
在使用JSON库(如Jackson)反序列化时,如果JSON数据与目标类型不匹配,会抛出MismatchedInputException异常。 通过下面的代码可以复现问题。
我对解析json有一个问题。它有一个日期为exapmle-"2014-01-07"。当它解析并成为createUserRequest.getBirthday()时,它包含-"2014-01-07T04:00:00.000 04:00"。我需要它在createUserRequest对象中,然后我会用另一个对象断言它。问题是如何得到“2014-01-07”? 在CreateUserRequest中,我
我需要使用openapi:3.0.0开发Mule API(4.4运行时)。endpoint是具有以下请求负载的POST: 这是OpenAPI 3.0规范的相关部分: 所以我可以验证单个元素,如“城市”和“国家”不为空,但我如何防止以下请求?(目前未标记为无效:)